Hogyan készítsünk egy Platformer játékot

2
Published on 7 Jan, 2020.

ELLENSÉG HOZZÁADÁSA

Remélhetőleg már ismered a sprite-ok és animációk hozzáadásának folyamatát. A gyors haladás érdekében a lépéseket teljes egészében nem kell megismételni. Adjunk hozzá egy új sprite-ot az ellenség számára.

  1. Adj hozzá egy új Sprite objektumot a layouthoz.
  2. Importáld az Enemies mappában lévő Snail sprite csíkot.
  3. Töröld az első üres animációs képkockát.
  4. Állítsd az animációt loop-ra, a sebességet 15-re.
  5. Állítsd be a csiga origin pontját (kezdőpontját) a kép aljára, és alkalmazd az egész animációra.
  6. Vágd le a felesleges az összes képkockáról (shift + vágás).
  7. Zárd be az animációs szerkesztőt, és nevezd át az objektumot „SnailEnemy” névre.
  8. Helyezd a földre az képen látható módon.

A következő logikát szeretnénk megvalósítani:

- Ha a játékos oldalról befut a csigához, akkor villognak és megsérülnek.

- Ha a játékos ugrik a csiga tetejére, a csiga meghal.

Ahhoz, hogy a játékos villogjon, válaszd ki a játékos objektumot, és add hozzá a Flash (villogás) viselkedést. Figyelj oda, hogy ne a PlayerBox elemet, hanem a játékos objektumot jelöld ki. A villogás eseményét a következőképpen adjuk hozzá:

Válts az eseménylap nézetre, és adj hozzá egy új eseményt:

PlayerBox -> On collision with another object (ütközés egy másik objektummal) -> SnailEnemy

Ez az esemény akkor fut, ha bármilyen szögből ütközünk a SnailEnemy-vel. Ezután az al-események segítségével tesztelhetjük, hogy a játékos a tetejére ugrik-e, vagy oldalról megy neki. Kezdjük először az ugrással.

Adj hozzá egy aleseményt az ütközési eseményhez:

PlayerBox -> Is falling (Leesik)

Meg kell vizsgálnunk, hogy a játékos valóban az ellenség felett van-e. Ez megakadályozhatja a csiga véletlen elpusztítását, ha mondjuk, hogy egy szélről leesünk. Kattints a jobb gombbal az ’Is falling’ feltételre, és válaszd az 'Add another condition' (Új feltétel hozzáadása) lehetőséget. Ne feled, hogy az esemény futtatásához minden feltételnek teljesülnie kell. Ad hozzá az új feltételt:

PlayerBox -> Compare Y (Y Összehasonlítása) -> Less than, (kevesebb, mint) SnailEnemy.Y

Az Y tengely lefelé növekszik, tehát ha a játékos Y koordinátája alacsonyabb, mint a csigáé, akkor felette van.

Ebben az esetben add hozzá a következő műveletet:

SnailEnemy -> Destroy (Elpusztul).

Azt is megteheted, hogy a játékos visszapattanjon, egy másik művelet hozzáadásával:

PlayerBox -> Set vector Y (Y vektor beállítása) -> -700

Az 'Set vector Y' alapvetően csak a platform mozgásának függőleges sebességét állítja be; Ha negatív értékre állítja, akkor felfelé állítja (ismét az Y tengely lefelé növekszik), és a 700 kicsit kevesebb, mint az 1100 ugrási erő. Tehát a játékos úgy fog visszapattanni, mintha gyenge ugrást hajtott volna végre.

Még nem vagyunk teljesen kész: jobb egérgombbal kattints a ’Is falling’ (Leesés) esemény margójára (a PlayerBox ikon bal oldalán található üres terület), és válaszd az Add (Hozzáadás) -> Else (Vagy / Egyéb) lehetőséget. Az „Else” egy speciális feltétel, amely akkor fut, ha az előző esemény nem futott le. Tehát ez az esemény akkor fog futni, ha összeütközünk a csigával, de nem ugrunk fel rá - mondjuk, oldalról belefutottunk. Ebben az esetben azt akarjuk, hogy a játékos megsérüljön. Adj hozzá egy műveletet:

Player -> Flash -> (hagyd az alapértelmezett értékeken, majd kattints a Done gombra)

Emlékeztetőül: a Flash viselkedés a Player objektumhoz van kötve, nem a PlayerBoxhoz.

Jelenleg a játékos nem fog meghalni, csak villogni. De lefedtük azt a részt, hogyan érzékeljük a ráugrást vagy az ütközést. Ez az oktatóanyag nem fogja lefedni az összes részletet, de remélhetőleg látod, hogy, hol lehet létrehozni ölési effektusokat (próbáljon meg létrehozni egy „poof” sprite-ot, amikor a SnailEnemy megsemmisül, akkor létrejön a „Spawn object” műveletével), és hol tudod a játékos életét levonni (például ha a játékos villog - az élet kezeléséhez az izometrikus lövölde játék bemutatójában található példányváltozókat használhatja, amikkel ott megismerkedhet).

Változtassuk meg a csiga mozgását, hogy előre és hátra mozogjon a platform mezőn.

ELLENSÉG MOZGATÁSA

A csiga mozgatásának fő problémája az, hogy miként lehet felismerni, hogy mikor éri el a peron szélét. A legegyszerűbb módja ennek a láthatatlan „él” jelölőkkel történő végrehajtása. Ezek csak láthatatlan spritek, amelyek megfordítják a csiga irányát, amikor megérinti őket.

A Platform viselkedést is használhatjuk a csiga esetében. Ez kényelmes, mert:

- jobbra és balra is tud mozogni

- felfelé és lefelé halad, ahogy a játékos képes

- leesik a platform mezőkről, ha szeretnéd

- ha ugró ellenséget akarsz készíteni, akkor az ellenség is ugorhat a 'simulate control' (írányitás szimulálása) művelettel

Add hozzá a Platform viselkedését a SnailEnemy sprite-hez. Mivel nem használunk bonyolult animációkat ezen az objektumon, elkerülhetjük a platform viselkedését közvetlenül az objektumon egy láthatatlan "doboz" objektum nélkül. Megjegyzés: ha különféle platformos játékot készít bonyolult animációkkal rendelkező ellenségekkel, akkor ugyanazt a boxtechnikát kell használni, mint amit a játékoson használtunk.

A célunk az, hogy ne a játékos irányítsa a SnailEnemy-t, azt automatikusan irányítani akarjuk. Ezt úgy tehetjük meg, hogy az Default controls (Alapértelmezett irányítás) tulajdonságát No értékre állítjuk, majd a Simulate control műveletet fogjuk erre használni. Mivel a csigák nagyon lassúak, állítsd be a Max speed értékét 50-re, Acceleration (Gyorsulás) és Decelartion (Lassulás) értékét 100-ra!

Szükségünk lesz az 'Edge' (él) jelölőkre is. Adj hozzá egy új Sprite objektumot, és csak tölts be egy átlátszatlan téglalapot. Nevezd el EdgeMarker-nek. Méretezd az objektumot körülbelül 40 x 40-re, és állítsd az Initial visibility (Kezdeti láthatóság) értékét Inivisible-re (Láthatatlan), így nem látjuk. Helyez egyet a csiga platformjának mindkét végére, például így: (ne felejtsd el, hogy létrehozhatsz egy új példányt a Ctrl + húzásával)

A csigának azt is tudnia kell, hogy melyik irányban mozog jelenleg - balra vagy jobbra. Ezt megtehetjük példányváltozókkal (instance variables). Ezek lehetnek egyszerűen számok vagy szövegek tárolva az objektum minden egyes példányában. Ha több csigánk van, akkor mindegyik külön-külön tárolja a példányváltozókat. Ez lehetővé teszi számukra, hogy egyedi értékeik legyenek életpontokra, az aktuális irányukra és így tovább. Az ellenségek automatikus irányításának egyszerű módja egy "action" példányváltozó létrehozása, amely megtartja a jelenlegi állapotát. Például: „elfut”, „üldöz” vagy „tétlen”. Ebben az esetben csak "balra" és "jobbra" van szükségünk, de hasznos ugyanúgy beállítani.

Válaszd ki a SnailEnemy objektumot. A Properties (Tulajdonságok) sávban sorban kattints az Add / Edit (Hozzáadás / Szerkesztés) elemre az ’Instance variables’ (Példányváltozók) alatt.

Megjelenik egy párbeszédpanel, amely felsorolja az objektum összes példányváltozóját. Új hozzáadásához kattints az 'Add' ikonra. Állítsa be a nevét ’action’-re, a típusát Text-re (szövegre) és a kezdeti értéket right-ra (jobbra mozgatáshoz).

Kattints az OK gombra, és zárd be a példányváltozók párbeszédpanelt. Válts az eseménylapra.

A következő logikát akarjuk megvalósítani:

- Ha az action "right", akkor szimulálja a platform mozgását, úgy, mintha jobb nyíl gombot nyomva tartva jobbra mozog a csiga.

- Ha az action "left", akkor szimulálja a platform mozgását, úgy, mintha bal nyíl gombot nyomva tartva balra mozog a csiga.

Továbbá:

- Ha a csiga eléri az EdgeMarkert, akkor fordítsa meg az action értékét (ha "left" legyen "right"; ha "right", akkor pedig "left").

A mozgást a következő két esemény segítségével állíthatjuk be:

Esemény: SnailEnemy -> Compare instance variable (Példányváltozó összehasonlítása) -> action értéke "right" (itt dupla idézőjelekkel kell körbevenni a szöveget)

Művelet: SnailEnemy -> Simulate control (Írányitás szimulálása) -> Right (Jobbra)

Ugyanúgy kell megcsinálni balra fordulásnál is. Állítsuk be, hogy a kép balról és jobbról tükröződjön, mint ahogyan a játékos számára. Tehát adjuk hozzá a SnailEnemy -> Set mirrored (Tükrözés) a "left" eseménynél, és SnailEnemy -> Set not mirrored (Nem tükrözve) a "right" esemény. A végeredménynek így kell kinéznie:

Most át kell állítani a csiga irányát a széleken:

Esemény: SnailEnemy -> On collision with another object (Más tárgyakkal való ütközés esetén) -> EdgeMarker

Al-esemény: SnailEnemy -> Compare instance variable (Példányváltozó összehasonlítása) -> action értéke egyenlő "right"

Művelet: SnailEnemy -> Set value (Érték beállítása) -> action értéke legyen "left"

Al-esemény: Else

Művelet: SnailEnemy -> Set value (Érték beállítása) -> action értéke legyen "right"

Fontos itt az Else ág használat, mert az események fentről lefelé zajlanak. A „else” használatával megakadályozzuk a második esemény futtatását, ha az első igaz volt.

Futtasd a projektet. Figyeld meg, hogy a csiga előre-hátra mozog a platformon. Így már egy kicsit nehezebb lesz ráugrani! Ez egy nagyon kezdetleges "AI" rendszer, de remélhetőleg el tudod képzelni, hogy intelligensebb ellenségeket hozhatsz létre, amiknek a mozgását irányíthatod még több eseményekkel, azt is engedélyezheted, hogy leessenek a szélekről vagy más jelölők használatával ugrást kezdeményezhetsz azért, mintha úgy nézne ki, hogy az ellenség fel tud ugrani egy platformra.

Próbálj meg létrehozni egy platform mezőt, amelyen két csiga található. Figyeld meg, hogy egyénileg megy a mozgásuk, mivel mindegyiknek megvan a saját egyedi példányváltozója, amely a jelenlegi irányát tárolja. Remélhetőleg most már láthatod, hogy mennyire fontosak a példányváltozók a példányok független viselkedéséhez - nem mindegyiknek kell pontosan ugyanazt a dolgot csinálnia!

  • 0 Comments

Want to leave a comment? Login or Register an account!