Toistaiseksi olemme lyöneet sankarimme seinään. Ja se oli hauskaa. Mutta tiiliseinä ei ole ainoa seinätyyppi, jonka voimme tehdä. Monissa peleissä on “pilvi”-tyyppiset seinät, joiden avulla sankari voi liikkua niiden läpi vasemmalta tai oikealta ja myös hypätä ylös, mutta kun sankari kaatuu alas, hän seisoo sen päällä. Katso esimerkki:
Joten, huomasitko eron? Katsotaanpa kuvia varmuuden vuoksi. Täällä meillä on normaali tiiliseinätyyppinen laatta. Sankari ei pääse sisään laattaan mistään suunnasta.
Mutta tämä on pilvi. Sankari voi päästä laattaan mistä tahansa muusta suunnasta paitsi ylhäältä. Jos sankari on tarpeeksi tyhmä yrittääkseen päästä sisään ylhäältä, asetamme hänet pilven yläpuolelle:
Asetamme ensin joitakin laattoja ominaisuudella “pilvi”. Jos ruudun “pilvi” on asetettu tosi, se on ilmeisesti pilvityyppiä. Ilmoita joitain prototyyppejä:
peli.Tile4= funktio () {};
game.Tile4.prototype.walkable=true;
game.Tile4.prototype.cloud=true;
game.Tile4.prototype.frame=4;
Laatta on “kävelykelpoinen” ominaisuus asetettu tosi, joten kyllä, sankari voi kävellä siihen. Jotta sankari seisoisi sen päällä, luomme putoamisen yhteydessä uuden toiminnon.
function checkIfOnCloud (ob) {
var leftcloud = peli[“t_”+ob.downY+”“+ob.leftX].pilvi; var rightcloud = peli[“t“+ob.downY+”_”+ob.rightX].pilvi;
if ((leftcloud tai rightcloud) ja ob.ytile != ob.downY){
paluu(tosi);
} muu {
paluu(false);
}
}
Käytämme oikean ja vasemman alakulman pistettä tarkistaaksemme, onko jokin niistä sijoitettu laattaan, mikä pilviominaisuus on totta. Jos jokin niistä todella on pilvessä, palaamme tosi. Jos pilveä ei löydy, palautusarvo on epätosi.
Nyt meidän täytyy kutsua tätä funktiota kahdesta paikasta: MoveChar-funktiosta, kun tarkistetaan laskeutumista ja putoamisfunktiosta, kun tarkistetaan, seisooko sankari vielä kiinteillä laatoilla vai alkaako hänen pudota.
Etsi tämä rivi moveChar-funktiosta heti if (diry == 1) jälkeen:
if (ob.downleft ja ob.downright) {
Lisää pilvitarkistus:
if (ob.downleft ja ob.downright ja !checkIfOnCloud (ob)) {
Samalla tavalla syksyn funktion korvausrivillä:
if (ob.downleft ja ob.downright) {
kanssa
if (ob.downleft ja ob.downright ja !checkIfOnCloud (ob)) {
Joten ennen kuin meillä oli tapana tarkistaa vain, ovatko molemmat vasen/oikea alapisteet ruudussa, jonka walkable-ominaisuus on asetettu tosi (laskimme arvot ob.downleft- ja ob.downright-arvoille getMyCorners-funktiossa). Nyt lisäämme vain tarkista, etteivät nämä pisteet ole pilviruudun sisällä.
Nauti pilvistä. Ja aurinko. Ja tähdet 🙂
Voit ladata lähdekoodin ja kaikki koodit ja elokuvat täältä.
Bugikorjaus 22.06.2004. Suuret kiitokset Carlosille virheen havaitsemisesta pilventunnistuskoodissa. Olen päivittänyt tutoriaalit ja flasin, mutta jos satut näkemään koodin jossain checkIfOnCloud-toiminnossa, jossa pilvet havaitaan:
if (leftcloud tai rightcloud) {
sijasta
if ((leftcloud tai rightcloud) ja ob.ytile != ob.downY) {
korjaa ne.
