Kuten näit luvusta “Karttamuoto”, meillä on karttamme kaksiulotteisena. Nyt saamme laatat näkyviin näytölle, asetamme ne oikeaan asentoon ja saamme ne näyttämään oikean kehyksen. Elokuva näyttää tältä:
Ensin määritetään joitain objekteja ja muuttujia:
myMap = [
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1]
];
peli={tileW:30, tileH:30};
peli.Tile0= funktio () {};
game.Tile0.prototype.walkable=true;
game.Tile0.prototype.frame=1;
peli.Tile1= funktio () {};
game.Tile1.prototype.walkable=false;
game.Tile1.prototype.frame=2;
Joten meillä on karttamme muuttujassa myMap. Seuraava rivi kartan jälkeen ilmoittaa objektin nimeltä “peli”. Käytämme tätä esinettä kaiken tarvittavan tavaran säilyttämiseen, voisimme pitää kaiken tavaran _juuressa tai missä tahansa, mutta sen puhtaampaa laittaa tavaraa yhteen tiettyyn paikkaan, jotta tiedämme aina missä ne ovat.
Huomaa, kuinka annamme peliobjektille kaksi ominaisuutta tileW=30 ja tileH=30. Sen verran leveitä ja korkeita kaikki laatat ovat. Laattojen ei tarvitse olla neliöitä, voit käyttää myös leveitä tai korkeita suorakulmioita. Aina kun haluamme tietää minkä tahansa laatan leveyden tai korkeuden, voimme kirjoittaa:
game.tileW;
peli.tileH;
Ja kun haluamme muuttaa laattojen kokoa, meidän tarvitsee muuttaa vain numeroita yhdellä rivillä.
Seuraavaksi asetamme laattojen prototyypit peliobjektiimme:
peli.Tile0= funktio () {};
game.Tile0.prototype.walkable=true;
game.Tile0.prototype.frame=1;
Ensimmäisen rivin peli.Tile0=-funktio () {} ilmoittaa uuden objektin prototyypin. Kun saamme karttataulukosta 0, käytämme Tile0:aa mallina uuden laattaobjektin tekemiseen kyseiseen paikkaan.
Seuraavat 2 riviä antavat tälle Tile0-objektille ja jokaiselle Tile0-prototyypillä luodulle objektille joitain ominaisuuksia. Asetamme jokaiselle tällaiselle objektille ominaisuuden walkable=true (joka tarkoittaa, että voimme kävellä sen yli) ja frame=1 (se näyttää kehyksen 1 liitetystä laatta-elokuvaleikkeestä).
Näytä karttani
Oletko valmis tekemään laattoja? Teemme toiminnon buildMap, joka hoitaa kaikki laattojen sijoittelut. Jos haluat luoda lisää tasoja, voit käyttää samaa toimintoa eri karttataulukoiden kanssa. buildMap-toiminto tekee seuraavaa:
+ liitä konttivideoleike
+ silmukka karttataulukon läpi
+ Luo uusi objekti jokaiselle laatalle
+ kiinnitä kaikki laattojen pidikkeet
+ Aseta laatat oikeaan asentoon
+ näytä oikea kehys jokaisessa ruudussa
Tässä on koodi sille:
function buildMap (kartta) {
_root.attachMovie(“tyhjä”, “laatat”, ++d);
game.clip=_root.tiles;
var mapWidth = kartta[0].pituus;
var mapHeight = kartta.pituus;
for (var i = 0; i < mapHeight; ++i) {
for (var j = 0; j < mapWidth; ++j) {
var nimi = “t_”+i+”_”+j;
peli[nimi]= uusi peli[“Tile”+kartta[i][j]];
game.clip.attachMovie(“tile”, nimi, i*100+j*2);
peli.leike[nimi]._x = (j*peli.tileW);
peli.leike[nimi]._y = (i*peli.tileH);
peli.leike[nimi].gotoAndStop(peli[nimi].kehys);
}
}
}
Ensimmäinen rivi ilmoittaa funktion ja myös asetamme funktion argumentiksi muuttujakartan. Kun kutsumme funktiota, välitämme sille karttataulukon, joten muuttujakartasta tulee kaksiulotteinen taulukko.
Seuraava rivi liittää konttielokuvaleikkeen lavalla:
_root.attachMovie(“tyhjä”, “laatat”, ++d);
Tarvitset tyhjän elokuvaleikkeen (ei grafiikkaa sisällä) kirjastoon. Napsauta hiiren kakkospainikkeella kyseistä elokuvaleikettä kirjastossa, valitse “Linkitä…” valitse “Vie tämä symboli” ja kirjoita Tunniste-ruutuun “tyhjä”. Nyt attachMovie-komento etsii kirjastosta elokuvaleikkeen, jonka linkin nimi on “tyhjä”. Se tekee sitten uuden esiintymän tästä elokuvaleikkeestä lavalla ja antaa tälle uudelle mc:lle nimen “laatat”. Tuo elokuvaleike säilyttää kaikki laatat, jotka asetamme lavalle. Hieno asia konttielokuvan käytössä on, että kun haluamme poistaa laatat (kuten pelin päättyessä), meidän tarvitsee vain poistaa “laatat” -elokuvaleike ja kaikki laatat katoavat. Jos liität kaikki laatat suoraan _root-tasolle ja siirryt seuraavaan kehykseen (kuten pelin loppukehykseen), liitetyt laatat eivät tapahdu katoamasta, sinun on poistettava ne kaikki actionscriptillä.
Kun meillä on elokuvaleike kaikille laatoille, linkitämme sen myös peliobjektiimme game.clip = _root.tiles. Nyt kun meidän on käytettävä laatat-elokuvaleikkeitä, voimme käyttää game.clip-tiedostoa. Se on kätevää, jos joudumme sijoittamaan laatat jonnekin muualle, meidän on vain nimettävä tämä rivi uudelleen eikä käydä läpi kaikkea koodia.
Sitten tehdään kaksi uutta muuttujaa mapWidth ja mapHeight. Ne, joita käytämme silmukassa karttataulukon läpikäymiseen. mapWidth on karttataulukon ensimmäisen elementin pituuden arvo map[0].length. Katso takaisin “Karttamuoto” -luvussa, jos unohdit, miltä karttataulukko näyttää. Karttataulukon ensimmäinen elementti on toinen taulukko [1, 1, 1, 1, 1, 1, 1, 1] ja mapWidthillä on sen pituuden tai elementtien lukumäärän arvo. Tiedämme nyt, kuinka laaja me olemme kartta olla.
Samalla tavalla mapHeightin arvo on map.length, se on karttataulukon rivien määrä. Ja niin monta riviä meidän on tehtävä.
Selaamme karttataulukon läpi riveillä:
for (var i = 0; i < mapHeight; ++i) {
for (var j = 0; j < mapWidth; ++j) {
Aloitamme muuttujan i arvosta 0 ja lisäämme siihen +1, kunnes se on pienempi kuin karttamme korkeus. Muuttuja j kiertää 0:sta karttamme leveyteen.
Muuttuja “name” riviltä var name = “t_”+i+”_”+j antaa meille nimen uudelle laattaobjektille. Oletetaan, että i=0 ja j=1, sitten nimi = “t_0_1”. Jos i=34 ja j=78, niin nimen arvo on “t_34_78”.
Nyt luomme uuden laattaobjektin:
peli[nimi]= uusi peli[“Tile”+kartta[i][j]]
Vasemmalla puolella peli[name] näyttää, että uusi laattaobjekti on sijoitettu peliobjektin sisään, kuten kaikki tavaramme. Kartan [i][j] arvo antaa meille numeron karttataulukosta riippuen siitä, mitkä ovat i- ja j-arvot. Käytämme sitten avainsanaa “new” luodaksemme uuden laattaobjektin aiemmin ilmoittamistamme prorotyypeistä. Nyt meillä on uusi objekti peliobjektissa, joka edustaa nykyistä laatta.
Seuraavilla riveillä liitetään uusi elokuvaleike lavalle ja käytämme peliä.clip[name] päästäksesi siihen. Elokuvaleike sijoitetaan oikeaan x/y-asentoon käyttämällä j- ja i-muuttujia kerrottuna laattojen leveydellä tai korkeudella. Koska uusi laattaobjektimme peri “frame” -ominaisuuden prototyypiltään, käytämme sitä mennäksemme oikeaan kehykseen gotoAndStop-komennolla.
Kun haluamme luoda laattoja kartasta, kutsumme buildmap-toiminnon seuraavasti:
buildMap(myMap);
