Ugrás a fő tartalomra

Amikor érdemes játékmotort késziteni

A mondás
A játékkészítő közösségben van egy mondás, hogy "Készíts játékot, ne játékmotort".
Szerintem ez a mondás nagyon is igaz abból a szempontból, hogy ha tényleg játékot akarsz készíteni, akkor válasz egy jól ismert játékmotort és kezd el a fejlesztést, mivel ezek az eszközök azért vannak, hogy megkönnyítésék a játékkészítést  és ugyebár mi értelme van feltalálni a kereket ismét?
Viszont itt is lehet találni kivételeket, amikor igenis el kell gondolkozni egy saját játékmotor fejlesztésén.

Mikor érdemes tehát belefogni?
 Most csak az én esetemet tudom felhozni, ami nem más mint a saját 2D HTML5 játékmotorom, amit DartRocket- nek hívok. Az én esetemben az ok egyszerű volt. Dart nyelven nem volt egy igazi játékmotor sem és én Dart-ban akartam játékokat készíteni.
Itt találtam is egy kiskaput mivel ha nincs játékmotor, akkor csinálni kell egyet. :D


Hogyan kezdődőt el?
Ha időrendben akarok menni, akkor azt kell mondanom, hogy négy időszak volt, ami meghatározó volt.

Phaser: Ebben az időszakomban a Phaser+Javascript-es HTML5-ös játék készítéssel voltam elfoglalva. Nagyon sok időt töltöttem azzal, hogy megismerkedjem azzal, hogy hogyan érdemes vele játékot készíteni. Ezáltal megláttam azokat a dolgokat amik kelletek egy játék motorhoz és ami szerintem még fontos, hogy megtanultam API dokumentációt olvasni.
Phaser időszakom végére beleuntam, hogy nem tudtam igazán szépen strukturált kódot csinálni, még olyan eszközzel sem mint Require.js.

Dart+StageXL: Phaser-ből való kiábrándulásom után úgy voltam vele, hogy megpróbálok végre csinálni Dart-tal egy játékot. Ehhez választottam a StageXL nevezetű webGL render engine-t, amiről már jó sokat hallottam és volt hozzá néhány példakód. Az indulás döcögős volt, mert sokat kellet tanulnom Dartról és StageXL-ről. Főleg az utóbbi volt a nehezebb, mert elég hiányos hozzá a dokumentáció.
Elsőként csináltam egy space invaderes játékot és néhány kísérletet, míg végül rájöttem, hogy közeleg LD29 játékkészítő kihívás. 

LD29: Azt tudni kell, hogy a legutóbbi LD óta részt akartam venni rajta, mivel nagyon megtetszett a kihívás. Tudtam, hogy kell valami különleges dolog, amivel kitűnhetek a tömegből ezért gondoltam, hogy a játékomhoz szinteket fogok csinálni. A szintekhez meg kellet egy állapot gép(state machine), ami segítségével tudok szépen egyszerűen szinteket csinálni. Végül az egész verseny ennek a kifejlesztésére ment el és az előkelő 1200 valahányadik lettem összetettben. 

LD29 után: Észrevettem, hogy a játékom egy hatalmas hack, tele copy-paste-tel és még lassan is ment vele a fejlesztés. Ezért tudtam, hogy a következő kihívásra kell csinálnom egy játékmotort, hogy ne kelljen olyan dolgokkal vesződnöm, amik csak rabolják az ember idejét.
 Tehát volt egy problémám, ami az volt, hogy Dart-nak nincs játékmotorja és én tudtam, hogy ez egy olyan probléma, amit megtudok oldani és ezért fontos problémává vált számomra, amiért el is kezdtem rajta dolgozni.

Hogyan kezdtem hozzá?
 Szerintem egy játékmotor legfontosabb része az állapot gép, mivel ahhoz, hogy a játék szép és strukturált legyen, előbb fel kell az bontani állapotokra. Szerencsére LD29 alatt meglett ez a fontos hozzávaló. 
 Egy másik fontos hozzávaló maga StageXL volt, mivel már volt egy alapom amire építhetem az egész rendszert így nem kellet nulláról kezdenem. StageXL a játékmotorom szempontjából olyan, mint Phasernek Pixi.js.(Pixi.js egy 2D webGL renderer)
 Harmadik fontos dolog maga a célkitűzés, mert nem mindegy, hogy mi az. Én ugyanazokat az elveket vallom mint Phaser-t készítő Rich, vagyis csinálni egy olyan játékmotort, ami egyszerű, ami így magában hordozza, hogy egyszerű megérteni és használni.

 Ezeket mind észben tartva kezdtem meg a fejlesztést és miután lett egy kézzel fogható változat négy dolgot csináltam:
  • Csináltam egy Github repot és feltöltöttem oda és így mindenki elérhet
  • Feltöltöttem Dart-nak a csomag kezelőjére vagyis Pub-ra
  • Csináltam egy blogot DartRocket-nek és megcsináltam az első bejegyzést
  • Bejelentettem a Dart közösségnek, hogy mit csinálok
 Szerintem az egyik legfontosabb dolog, hogy a közösségnek bejelentettem, mivel ezáltal kaptam jó visszajelzéseket és nyomás alá is helyeztem magam, hiszen ezzel azt jelentettem be hogy ezt komolyan veszem és nyugodtan várjanak el jó munkát tőlem.

Mit remélek DartRocket-től?
 Amit a legjobban remélek, hogy valamennyire ismert lesz majd és néhányan veszik a bátorságot, hogy csináljanak vele egy játékot és közben tanuljanak magáról a Dart nyelvről. Ősszintén szólva az egyik ok, amiért elkezdtem az egészet, hogy népszerűsítsem a Dart nyelvet, mivel szerintem a nyelv nagyon is megérdemli és szerintem a játékkészítés egy nagyon hatásos módja annak, hogy másokkal megismertessünk egy nyelvvel.

Napi tipp:
 Nagyon tudom ajánlani Hamming előadását: You and your research(videó)(írott).
Számomra kiderült belőle, hogy mik is az igazán fontos problémák.
Akik nem szeretnek túl sokat olvasni vagy nézni azoknak mondom, hogy az előadás végén van egy összefoglaló.

Megjegyzések

  1. Üdv, köszi a tippet a dartról, most olvastam róle először de ahogy így rágoogliztam érdekes szerintem jobban utánanézek

    VálaszTörlés
    Válaszok
    1. Megéri ránézni, mert nagyon jól halad a nyelv fejlesztése és mert elég érdekes dolgok szoktak jönni hozzá.
      Na meg van egy olyan érzésem, hogy Dart majd jövőben sokkal népszerűbb lesz.

      Törlés
  2. Szerintem 2 dolog miatt fontos a saját engine:
    1. referencia: Aki leprogramoz egy enginet, az valószínűleg egy vonalkód nyomtatót is le tud (bár volt, aki ezek után is feltett elemi kérdéseket interjún), vagyis egy nyílt forrrású rendszer sokmindent elárul, mivel céges projekteket nem lehet mutogatni.

    2. testreszabás: Legtöbb engine szép, meg jó, de nehéz rajta változtatni és manapság, amikor már egy 5 éves gyerek is össze tud rakni egy játékot fontos lehet valamivel kitűnni a tömegből, ami akár ezen is múlhat. (pl egy raycast auto modell elég gagyi, normális kerék fizika viszont sokat dob a játék élményen)

    VálaszTörlés

Megjegyzés küldése

Népszerű bejegyzések ezen a blogon

HTML5 játék fejlesztés alapjai

Ahogy a cím is sugallja a HTML5 játék fejlesztés alapjairól lesz szó ,hogy mi is kell hozzá.
Az én tudásom ebben a témában még elég kicsi ,de egyre növekszik ,talán egyszer majd én is össze fogok szedni annyi tapasztalatot a témából ,hogy akár még könyvet is írhatnék róla. Na persze egy izgalmas könyvet. :D

Na akkor vágjunk is bele!
    Első kérdés ,hogy mi a legalapvetőbb dolog ,amit ehhez meg kell tanulni? Persze sokan mondhatják ,hogy html , javascript ,css ismerete ,ebben igazat is adnék ,de nekünk még van ennél sokkal alapibb tudás ,ami a magyar programozókra főként igaz ez pedig az angol tudás.
Ezt nagyon sokszor tapasztalja az ember ,hogyha nem elég jó az angolja ,akkor egyetlen mondat is megtudja akasztani ,ahol az író nagyon szakmai akart lenni.
Főleg emiatt szeretem azokat az írókat ,akik semmi köntörfalazás nélkül belevágnak a lecsóban és simán és egyszerűen elmagyarázzák a dolgokat.

   Ha az első szint megvan akkor jöhet a HTML tanulása ,ami elég gyorsan letudható ,hiszen c…

Javascript kezdő lépések

Ma kis bejegyzésem arról fog szólni ,hogy mit érdemes kezdő lépésenként megtanulni ,illetve ,hogyan érdemes haladni Javascripttel és néhány érdekesség is lesz node.js-sel kapcsolatban.

Tanulás
   Szerencsére olyan világba élünk már ,ahol a web és webes technológiák nagyon gyorsan fejlődnek és ezért ezeknek a tanulása is egy fajta fejlődésen ment keresztül. Már nem könyvből kell tanulni ,hanem vannak olyan oldalak ahol interaktív módon lehet egy nyelvet megtanulni ,ami tökéletes a tanulás szempontjából. Előző cikkemben raktam be anyagokat ahhoz ,hogy mit érdemes elolvasni ,ha a tanuló inkább olvasós fajta és volt bent 2 interaktív.  Én például codecademy segítségével tanultam meg Jquery-t használni. Javascripthez Eloquent és codeacademy-t használtam.

   Mivel a Javascript elég megengedő ezért nagyon sok fajta stílusban kódolnak hozzá és ezek a stílusok  néha teljesen eltérőék. Szóval aki tanult már Java ,c vagy c++-t annak is lehet újdonság ,mivel ezeknél a nyelveknél nagyon szépen megv…