A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalon Előző változat Következő változat | Előző változat | ||
tanszek:oktatas:jatek_prototipusok:jatek_prototipusok:rpg_tutorial [2022/10/09 13:43] kissa [Továbbfejlesztési lehetőségek] |
tanszek:oktatas:jatek_prototipusok:jatek_prototipusok:rpg_tutorial [2022/10/10 08:38] (aktuális) kissa |
||
---|---|---|---|
Sor 312: | Sor 312: | ||
{{:tanszek:oktatas:jatek_prototipusok:jatek_prototipusok:monster-spawned.png?400|}} | {{:tanszek:oktatas:jatek_prototipusok:jatek_prototipusok:monster-spawned.png?400|}} | ||
- | ==== Harc a szörnyekkel ==== | + | ===== Harc a szörnyekkel ===== |
Minden szörny rendelkezik életerővel (''health''), sebzéssel (''attack''), és coin-okkal (''coins''). Ezeket az adatokat a játékos szörnyekkel történő harca során használjuk fel. | Minden szörny rendelkezik életerővel (''health''), sebzéssel (''attack''), és coin-okkal (''coins''). Ezeket az adatokat a játékos szörnyekkel történő harca során használjuk fel. | ||
- | ===== Fegyver létrehozása, animálása ==== | + | ==== Fegyver létrehozása, animálása ==== |
Kezdésként a játékos kezében szeretnénk megjeleníteni egy kardot, amit mindig a játékossal együtt mozgatunk. Ehhez a játékos spawn-olásán módosítani fogunk. A ''Player'' sprite mellé egy ''Weapon'' sprite-ot is létrehozunk, majd ezt a kettőt egy konténerben kapcsoljuk össze ([[https://photonstorm.github.io/phaser3-docs/Phaser.GameObjects.Container.html|Container osztály dokumentációja]]). | Kezdésként a játékos kezében szeretnénk megjeleníteni egy kardot, amit mindig a játékossal együtt mozgatunk. Ehhez a játékos spawn-olásán módosítani fogunk. A ''Player'' sprite mellé egy ''Weapon'' sprite-ot is létrehozunk, majd ezt a kettőt egy konténerben kapcsoljuk össze ([[https://photonstorm.github.io/phaser3-docs/Phaser.GameObjects.Container.html|Container osztály dokumentációja]]). | ||
Sor 342: | Sor 342: | ||
A kódban látható, hogy abszolút pozíciója csak a konténernek van, a játékos és a fegyver koordinátái a konténer pozíciójához képest vannak megadva. | A kódban látható, hogy abszolút pozíciója csak a konténernek van, a játékos és a fegyver koordinátái a konténer pozíciójához képest vannak megadva. | ||
- | A kamerának a továbbiakban nem a player sprite-ot, hanem a playerContainer-t kell követnie, ezt módosítsuk: | + | A kamerának a továbbiakban nem a ''player'' sprite-ot, hanem a ''playerContainer''-t kell követnie, ezt módosítsuk: |
<sxh js> | <sxh js> | ||
Sor 348: | Sor 348: | ||
</sxh> | </sxh> | ||
- | Módosítanunk kell továbbá az ''updatePlayer'' metódust is, a megfelelő irányú erőket ezután a konténeren helyezzük el a játékos helyett. Amikor jobbra vagy balra mozdulunk, akkor a fegyvert is ennek megfelelően fordítjuk el, illetve helyezzük át. | + | Módosítanunk kell továbbá az ''updatePlayer'' metódust is, a megfelelő irányú erőket ezután magán a konténeren helyezzük el, a játékos helyett. Amikor jobbra vagy balra mozdulunk, akkor a fegyvert is ennek megfelelően fordítjuk el, illetve helyezzük át. |
<sxh js> | <sxh js> | ||
Sor 379: | Sor 379: | ||
this.physics.add.collider(this.playerContainer, this.blockedLayer); | this.physics.add.collider(this.playerContainer, this.blockedLayer); | ||
</sxh> | </sxh> | ||
- | ===== Harc ===== | + | ==== Harc megvalósítása ==== |
A harc implementációjának első lépéseként adattagokat fogunk felvenni. Egyrészt tárolnunk kell azt, hogy a játékos éppen harcol-e, ezt adjuk hozzá az ''init'' metódushoz: | A harc implementációjának első lépéseként adattagokat fogunk felvenni. Egyrészt tárolnunk kell azt, hogy a játékos éppen harcol-e, ezt adjuk hozzá az ''init'' metódushoz: | ||
Sor 394: | Sor 394: | ||
}; | }; | ||
</sxh> | </sxh> | ||
- | |||
Következő lépésként egy tween animációt fogunk létrehozni, mely a SPACE billentyű lenyomása esetén a kardot 360°-ban megforgatja. Ehhez az ''updatePlayer'' metódust egészítsük ki a következő sorokkal: | Következő lépésként egy tween animációt fogunk létrehozni, mely a SPACE billentyű lenyomása esetén a kardot 360°-ban megforgatja. Ehhez az ''updatePlayer'' metódust egészítsük ki a következő sorokkal: | ||
Sor 425: | Sor 424: | ||
</sxh> | </sxh> | ||
- | Ezután adjunk egy kezdeti implementációt az ''enemyOverlap'' metódusnak. Ez azt vizsgálja, hogy a játékos támadásban van-e, illetve még nem ütötte meg a szörnyet. Ha a feltétel teljesül, akkor rögzítjük, hogy a játékos megütötte a szörnyet, és a későbbiekben változtatni fogjuk a szörny életerejét (de egyelőre csak egy üzenetet íratunk ki a konzolra). | + | Ezután adjunk egy kezdeti implementációt az ''enemyOverlap'' metódusnak. Ez azt vizsgálja, hogy a játékos támadásban van-e, illetve még nem ütötte-e meg a szörnyet. Ha a feltétel teljesül, akkor rögzítjük, hogy az adott támadás során a játékos megütötte a szörnyet, és a későbbiekben változtatni fogjuk a szörny, valamint a játékos életerejét is (de egyelőre csak egy üzenetet íratunk ki a konzolra). |
<sxh js> | <sxh js> | ||
Sor 440: | Sor 439: | ||
{{:tanszek:oktatas:jatek_prototipusok:jatek_prototipusok:monster-hit.png?400|}} | {{:tanszek:oktatas:jatek_prototipusok:jatek_prototipusok:monster-hit.png?400|}} | ||
- | A metódusunkat tovább bővítjük, minden ütéskor 1-et levonunk a szörny életerejéből, majd megvizsgáljuk, hogy az 0-ra csökkent-e. Amennyiben igen, a szörnyhöz tartozó pontszámot jóváírjuk a játékosnál (és frissítjük a kijelzést), majd a szörny adatait eltávolítjuk a spawner-ből, és végül magát a sprite-ot is megszüntetjük. | + | A metódusunkat tovább bővítjük, minden ütéskor 1-et levonunk a szörny életerejéből, majd megvizsgáljuk, hogy az 0-ra csökkent-e. Amennyiben igen, a szörnyhöz tartozó coin-okat jóváírjuk a játékosnál (és frissítjük a kijelzést), majd a szörny adatait eltávolítjuk a spawner-ből, és végül magát a sprite-ot is megszüntetjük. |
<sxh js> | <sxh js> | ||
Sor 498: | Sor 497: | ||
{{:tanszek:oktatas:jatek_prototipusok:jatek_prototipusok:attack-health.png?400|}} | {{:tanszek:oktatas:jatek_prototipusok:jatek_prototipusok:attack-health.png?400|}} | ||
- | A játékos életerejét a felhasználó számára is láthatóvá szeretnénk tenni, ennek érdekében a ''UIScene''-t is módosítjuk. A ''create'' metódust új szöveg létrehozásával egészítjük ki: | + | A játékos életerejét a felhasználó számára is láthatóvá szeretnénk tenni, ennek érdekében a ''UiScene''-t is módosítjuk. A ''create'' metódust új szöveg létrehozásával egészítjük ki: |
<sxh js> | <sxh js> | ||
Sor 517: | Sor 516: | ||
uiScene.updateHealth(this.player.config.health); | uiScene.updateHealth(this.player.config.health); | ||
</sxh> | </sxh> | ||
+ | |||
+ | A kódból minden ''console.log'' utasítást kitörölhetünk, ezek csak a fejlesztés során voltak segítségünkre. | ||
===== Továbbfejlesztési lehetőségek ===== | ===== Továbbfejlesztési lehetőségek ===== | ||
Sor 524: | Sor 525: | ||
* object pooling alkalmazása a ládákra/szörnyekre (lásd platformer példa), | * object pooling alkalmazása a ládákra/szörnyekre (lásd platformer példa), | ||
* achievement rendszer létrehozása, | * achievement rendszer létrehozása, | ||
- | * új itemek bevezetése (pl. pajzs, páncélzat, jobb kard, stb., ezek csökkenthetik a szörnyek sebzését, és növelhetik a játékosét), | + | * új itemek bevezetése (pl. pajzs, páncélzat, stb., ezek csökkenthetik a szörnyek sebzését, és növelhetik a játékosét), |
* inventory rendszer létrehozása, | * inventory rendszer létrehozása, | ||
* kereskedés itemekkel, | * kereskedés itemekkel, |