Tilemapit ja tietokoneohjaus

(Klikkaa peliruutua aktivoidaksesi näppäimet: nuolet + space)

Vaikka tarkoitukseni oli pienen tilemap-tutkailun jälkeen jatkaa LeMans-kloonin parissa puuhastelua, jumahdin tarkastelemaan TileMap- ja TileSet-noodeja hieman pidemmäksi aikaa.

Pääsyy tähän oli se, että huomasin että tilesetin yksittäisiin ruutuihin voi lisätä törmäyksiä tarkkailevien noodien lisäksi myös NavigationPolygonInstance-noodin. Tämän noodin avulla tilemapiin merkitään ne alueet, joilla pelaaja tai tietokoneen ohjaama hahmo voivat liikkua. NavigationPolygonInstance toimii yhteistyössä Navigation2D-noodin kanssa; Jos Navigation2D-noodilla on lapsielementteinä NavigationPolygonInstance-noodeja, se luo niiden perusteella kartan alueesta, jossa pelaaja ja tietokone voivat liikkua. Navigation2D-noodin get_simple_path()-funktio tarjoaa myös varsin yksinkertaisen tavan hakea reitti etappipisteinä paikasta A paikkaan B:

path = nav.get_simple_path(start_position, goal, false)

Kun reitti – esimerkiksi pelaajan senhetkiseen sijaintiin – on selvillä, onnistuu tietokoneen ohjastaman hahmon liikuttaminen pisteestä toiseen helposti esimerkiksi linear_interpolate()-funktion avulla. GDQuest esittelee tämän tavan liikuskella kattavasti YouTubessa.

Itse halusin tehdä asiat hieman vaikeamman kautta, ja päädyin toteutukseen jossa tietokoneen ohjastama tankki katsoo joka framen kohdalla missä suunnassa seuraava piste on ja kääntää keulaansa tarvittaessa sen suuntaan. Tai jos seuraava piste on vähän tankin takana, voi tankki myös peruuttaa ja kääntyä. Tällä tavoin tehtynä liike näytti omaan silmääni luonnollisemmalta kuin interpolaation avulla tehty liike.

Koska tankkien liikuttelu osoittautui varsin hauskaksi, luulen että rakentelen tähän prototyyppiin vielä mahdollisuuden tuhota tankkeja ampumalla ennen kuin jatkan LeMansin pariin.

Source: https://github.com/mikahimself/tanked

Leave a Reply

Your email address will not be published. Required fields are marked *