Lisää rullausta

Home » Blogi » Lisää rullausta

Sankarin pitäminen keskellä on ihan ok, kunnes siirrymme kartan rajalle, sitten alamme nähdä rumaa taustaa kartan ulkopuolella. Voit poistaa tämän ongelman, jos rakennat seinälaattoja karttasi sisään, mikä estää sankareita lähestymästä reunaa. Mutta se vaatii lisäsuunnittelua karttoihin, ja se lisää tarpeetonta tyhjää aluetta niiden ympärille. Paljon parempi idea on selata taustaa vain silloin, kun sankari ei ole lähellä reunaa. näin:

Kuinka kaukana on liian kaukana?

Sankari liikkuu aina, ainoa ero on, että kun hän saavuttaa kartan reunan, emme enää rullaa taustalaattoja, joten se ei rullaa. Vasemmassa kuvassa sankari on vasemmasta reunasta “halfvisx” määrän laattoja pois. Jos sankari liikkuisi enemmän vasemmalle ja kartta rullaisi, se paljastaisi alueen, jota kartta ja laatat eivät kata:

Oikeassa sankari on alareunasta “puolittain” laattojen päässä. Vieritystä ei pitäisi enää tapahtua, kun sankari liikkuu alaspäin.

Meidän on otettava huomioon sankarin uudet paikat myös ensimmäistä kertaa karttaa rakennettaessa. Jos sankari alkaa lähellä kartan reunaa, häntä ei voida sijoittaa keskelle. Itse asiassa tapahtuu, että siirrämme kaikkia laattoja, mukaan lukien sankaria, tietyllä määrällä, kun sijoitamme ne buildMap-toiminnolla.

Kun olet sijoittanut laatat clipin ja laskenut halfvisx/halfvisy-arvot buildMap-funktiossa, lisää koodi:

game.mapwidth=kartta[0].length;
game.mapheight=map.length;

game.mapwidth on vaakasuuntaisten laattojen määrä nykyisellä kartalla ja game.mapheight on pystysuorien laattojen määrä. Käytämme niitä määrittääksemme, onko sankari lähellä kartan oikeaa vai alareunaa. Lasketaan nyt, kuinka paljon meidän on siirrettävä laattoja, kun sankari alkaa läheltä reunaa:

if(game.halfvisx>char.xtile){
var fixx=char.xtile-game.halfvisx;
var fixx1=0;
}else if(char.xtile>game.mapwidth-game.halfvisx-1){
var fixx=char.xtile-game.mapwidth+game.halfvisx+1;
var fixx1=1;
}
if(game.halfvisy>char.ytile){
var fixy=char.ytile-game.halfvisy;
var fixy1=0;
}else if(char.ytile>game.mapheight-game.halfvisy-1){
var fixy=char.ytile-game.mapheight+game.halfvisy+1;
var fixy1=1;
}

fixxillä ja fixyllä on arvo laattojen lukumäärälle, joka tarvitaan siirtämään kaikkea, jotta sankari ilmestyy oikeaan paikkaan. Ensimmäinen rivi tarkistaa onko sankari lähellä vasenta reunaa, se tapahtuu vain kun xtile on pienempi kuin halfvisx ja sitten siirretään laattoja xtile-halfvisx määrällä. Oikeassa reunassa sankari seisoo vain, jos xtile on enemmän kuin mapwidth-halfvisx.

Muuttujia fixx1 ja fixy1 (anteeksi, etten käytä selkeitä ja ymmärrettäviä muuttujien nimiä) käytetään silmukassa laattojen läpi käydessä. Ilman niitä koodi yrittäisi silti sijoittaa laattoja kartta-alueen ulkopuolelle, kun sankari seisoo lähellä oikeaa tai alareunaa.

Nyt lisäämme fixx/fixy laatan paikkaan:

game.clip._x = peli.centerx-((char.xtile-fixx)game.tileW)-game.tileW/2; game.clip._y = peli.centery-((char.ytile-fixy)game.tileH)-game.tileH/2;

ja meidän on myös lisättävä silmukoihin kiinnitysmuuttujia näkyvien laattojen luomiseksi.

Varmistaaksesi, että alamme laskea oikeasta ruudusta, lisää nämä korjausmuuttujat myös xstepiin ja ystepiin:

char.xstep=char.x-(fixx+fixx1)game.tileW; char.ystep=char.y-(fixy+fixy1)game.tileH;

Kyse on kartan rakentamisesta. Jatketaan nyt sankarin siirtämistä.
Liikkuu reunalla

MoveChar-funktiossa lasketaan ensin fixx- ja fixx1-muuttujat samalla tavalla kuin buildmap-funktiossa. Sitten laitamme koodin vierivän osan if-lauseisiin, mikä on totta vain, jos sankari on tarpeeksi kaukana kartan reunasta. Samalla tavalla muokkaamme myös pystysuuntaista liikettä.

Koska joskus changeTile-funktiota kutsutaan edelleen vaihtamaan laatta, jota ei todellisuudessa ole olemassa, käytämme nopeaa ja likaista korjausta. Jos vanhaa laatta ei ole olemassa, palauta tekemättä mitään:

if(game[nameold].walkable==undefined){
palata;
}

Siinä kaikki vieritysosastolta, seuraavaksi tarkastellaan elokuvaleikkeiden syvyyttä ja jotain hyvin pelottavaa nimeltä “z-lajittelu”.

Voit ladata lähdekoodin ja kaikki koodit ja elokuvat täältä.

Tämä luku kirjoitettiin uudelleen, koska alkuperäinen koodi epäonnistui kartan oikeassa ja alareunassa. Kiitos Janille vian löytämisestä.