2012. április 4., szerda

List, entity, shooting, stb.

Lehet lassan hozzá kell szoknom / szoknotok, hogy havi szinte blogolok, de akkor legalább mindig valami nagyobb lélegzetűt. :)

Rohamtempóban halad a fejlesztés, és az elmúlt 2 hétben minden olyan egyszerűen és gyorsan elkészült. Remélem nem most fog jönni a lejtmenet, mert még szívesen tartózkodnék ebben a kreatív és hatékony időszakban. :P

Ja igen, ígértem egy minigamet a múltkor. No hát le lettem szólva csúnyán - végülis jogosan - Bitsculptor részéről, hogy nincs "sideproject" meg különcködés, tehát gyorsan visszaterelgetett a shúterünkhöz. :)
Arra viszont jó volt az a két nap, amit azzal a játékkal töltöttem, hogy pár olyan dolgot kikisérletezzek, amit hasznosítani tudok / tudtam a játékunkban. 
Ilyen lett például a Shooting osztály. A player és az enemy-k is megkapják az osztály kezelését, és ha lőni akarnak, a fegyverzetüknek megfelelő adatokat elküldik a Shooting-nak, valamint az X és Y koordinátáját a kilövés helyének. Ezt egy BulletShell nevű mini osztályban tárolom, és a Shooting BulletList-jét frissítgetik.
Ezután fogja magát a Shooting és minden ciklusforduláskor leellenőrzni a BulletList-et, hogy van e benne lövedék. Ha van, akkor végigpörgeti egy ciklussal és létrehozza a lövedékeket. Ezután törli a listát és kezdődhet elölről. 

Ez azért kellett, mert belefutottam már a Prototype-nál is és a kis sideproject-nél (nincs erre értelmes, magyar szó?) is, hogy ha sprite-on belül akartam lövedéket létrehozni, akkor az egy pillanatnyi reccenést okoz az adott sprite mozgásában. Ha meg mondjuk particlesystemet akarok létrehozni, vagy olyan lövedéket, akkor még nagyobbat akad. És mivel az Andorra nagyon szépen és helyesen külön szálakon kezeli a szprájtjait, ezért azt láttad egy nagyobb lövöldözés közepette, hogy mindenki össze-vissza akadgat, és közben ontja magából a lövedéket. Playernél ez különösen mókás, főleg úgy, hogy kb. csillagszóróként működik... :D

Nem tudom írtam e előző bejegyzésekben valahol, hogy mennyire fontosak a jó listák. Az én életemet megkönnyítette a TList-ek használata. Kicsit átírtam, kibővítettem és végre nem kell saját recordokat, meg láncolt listát, meg dinamikus listát írni, meg ilyen szerencsétlenségeket. Ott a TList, ez lesz a listám őse, ott átírom, hogy Itemként milyen típusokat (pl BulletShell a BulletList-nél) vagy milyen ojjektumokat (pl. AdvancedParticleSystem a ParticleList-ben) kezeljen. Hozzáraktam Find függvényt, ami name vagy ID alapján visszaadja a keresett itemet - már ha van - és utána tökéletesen használható, mert van saját Add, Delete, Clear, Exchange, Insert, stb. stb. eljárásai.

(megjegyzés: 3. napja írom melóhelyen ezt a bejegyzést, de ma már csak befejezem)

Izé... Hol tartottam... :D
Tegnap este (ápr 4.) nekiálltam a fegyverzetek felszerelésének az entity-kre.
Érthetőbben: van egy weapon editorom, ahol megadhatom, hogy a lövésnek milyen torkolattüze legyen (particlesystem), a lövedéknek milyen textúrája, sebessége, robbanása, sebzése, stb. stb. Ezeket a fegyvereket egy fent bemutatott listában tárolom (WeaponList). Eddig úgy működött a cumó, hogy egy entity-hez (entity-t is mindjárt kifejtem) hozzá lehetett rendelni egy azaz egy fegyverzetet meg egy meghajtót (ez csak egy "kipufogó" animáció, ami szintén particlesystem). De őnagysága, fenséges bitsáska úr kérte, hogy ezek dinamikusan legyenek változtathatók. :) Logikus, és valóban így lesz jó, de lustaságom, vagyis inkább fáradtságom határtalan, ezért nem akartam vele vesződni. A lényeg az hogy kérte, hogy legyen, és tegnap bele is fogtam. :) Annyiban bonyolódik a dolog, hogy az Entity kap egy új mezőt, ami egy TList (ki hinné). Ez a TList (Weapons) tárolja az entity-hez adott fegyverzetek azonosítóját (ID). Ugyanezt eljátszom majd a "meghajtókkal" is és kész is a dinamikusan változtatható felszerelés. :)

És hogy megértsétek, hogy az Entity mit is takar:
Ez az osztály tárolja az editorban összekattingatott űrhajókat. Persze nem muszáj csak űrhajónak lennie, lehet bármi más is, de jelenleg csak űrhajókat csinálunk. :) Van ugyebár textúrája, robbanása, sebessége, HP-ja. Fel lehet szerelni tehát fegyverekkel, meghajtókkal. Később pajzsot is fog kapni, vagyis kaphat. Ó, az is mi munka lesz, előre látom... :D
(újabb szünet után folytatás...) Az Entity pedig a saját adatait átadja a származtatni kívánt playernek és enemy-nek. Az, a származtatáskor leellenőrzi, hogy az entity-hez volt e rendelve hajtómű, van e fegyverzet, stb. stb. és úgy hozza létre magát.
Remélem nem hangzik bonyolultnak, mert szerintem nagyon jó kis megoldás, vagyis eddig tökéletesen beválik.

Lehet még folytatom, de jelenleg lezárom így és végre postolom. :D

Nincsenek megjegyzések:

Megjegyzés küldése