2009. november 29., vasárnap

Miért XNA?

Most pedig írnék arról, hogy miért az XNA-t választottuk, és egyáltalán mi az.
Többen máshogy definiálják, de én maradnék annál, hogy egy framework.

Mit is jelent ez?
A 'framework' szóra rákeresve az angol-magyar szótárban, többek között a 'keret', 'váz' szót találjuk. Tehát az XNA egy keretrendszer, ami röviden, tömören annyit tesz, hogy rengeteg alap dolgot tartalmaz, amit saját magunknak kellene megírni mondjuk c++ DirectX kombóval (de akár c# MDX (= Managed DirectX) kombóval is). Magát a keretrendszert c#-al lehet használni, ebből adódott, adódik, és adódni is fog vita. A teljesítményt és a memóriakezelést hozzák fel a vita tárgyaként, mondván, hogy míg c++ esetén teljesen a mi kezünkben van a memóriakezelés (érsd: akkor foglalsz le és szabadítasz fel memóriát, amikor csak akarsz - meg nyilván amikor értelme is van -), addig a c# esetén az ún. GC (= Garbage Collector) irányítja ezeket, amire érkezik a sok támadás, miszerint nem látja el jól a feladatát (természetesen már sikerült bebizonyítani, hogy teljesen jól működik, talán a későbbiekben csinálok is erről egy felmérést, ha nagyon unatkoznék :)). Van néhány pontatlanság a wiki-s cikkben. Csak egyetlen példát írnék:
"Minden objektum törlődni fog, de nem tudni mikor." - Én pontosan tudom, hogy mikor fog törlődni: Akkor, amikor megszűnik rá minden hivatkozás. Csak egy példa a content kezelésre (XNA-s lebutított kódrészlet: )



/*Létrehozunk egy lokális content managert minden egyes pályához.*/
ContentManager content;

/*Amikor betöltjük a pályát*/
public void Load(...)
{
/*Elkészítjük a lokális content managert*/
content = new ContentManager(game.Services, game.Content.RootDirectory);

/*content betöltés...*/
}

/*Amikor kilépünk a pályáról, illene törölni mindent, amit erre a pályára betöltöttünk*/
public void Unload()
{
/*Itt a lényeg csupán annyi lenne, hogy minden egyes Model-t, Texture2D-t, és egyéb betöltött dolgokat 'null'-ra kell állítani. Ezzel tudjuk jelezni a GC-nek, hogy már nincs rá szükségünk*/

/*Miután mindent null-ra állítottunk, amit törölni szeretnénk:*/
content.Unload();
content = null; /*Megszűntetjük a hivatkozást a helyi content managgerre*/

GC.Collect(); /*Majd szólunk a GC-nek, hogy ideje takarítani :)*/
}



És lám, minden eltűnt, aminek kell. (én pl. úgy csináltam, hogy több 4048-as bmp-t betöltöttem (~12mb volt egy), majd töröltem őket, és ezt többször egymás után)

A másik, amit támadni szoktak az a JIT (= Just In Time) fordítás, ami azt a feladatot látja el, hogy futásidőben optimalizálja az adott gépre a kódot, szemben a c++ fordítókkal, amelyek natív kódot fordítanak, és éppen arra a gépre van optimalizálva, amelyikre "beállították" a fordítót. Az előbbi nyilván valamekkora teljesítményt igényel, ezért valamilyen szinten van is igazság abban, amit mondanak: nagy teljesítményigényes programok esetén a c#ban készültek lassabban futnak, mint a c++os változatuk.

De hát akkor kinek jó ez?
A casual/indie fejlesztőknek, illetve olyan embereknek, akik játékot szeretnének készíteni, és nem azzal akarnak foglalkozni, hogy az utolsó cseppig optimalizálják a saját (vagy egy ingyenesen letölthető / megvásárolt) engine-t. Emellett fontos megemlíteni a Multiplatform támogatást. Ezek közül is (számomra) mérhetetlenül fontos az Xbox360-ra való fordítás lehetősége. Ha a c++os játékunkat akarnánk Xbox360-ra fordítani, akkor ahhoz meg kellene vennünk a DevKit-et (= Developer Kit), amiről nincs információm, hogy mennyibe kerül, de amit félfüllel hallottam, az magánembernek (hacsak nem milliomos) szerintem megfizethetetlen. Természetesen XNA-val sem tudunk ingyen Xbox-ra fordítani, meg kell venni az éves díjú ún. Premium Account-ot (~20.000Ft/év); bővebb infó itt.
Természetesen, ha valakinek nem elégséges a rendszer által nyújtott teljesítmény, akkor szabadon átírhat nagyjából mindent, de nem hiszem, hogy egy garázsprojekt számára nem lenne elegendő.

Tehát senki sem fog tudni XNA-val Crysis 4-et fejleszteni, de nem is erre találták ki.

2009. november 28., szombat

Miért Hind?

Akkor lassan nézzünk a dolgok mögé: mit jelent a játék címe?
Hind. Angol-Magyar szótárban rákeresve (többek között) a szarvastehén kifejezést találhatjuk. :)
Játék szarvastehenekkel? Lelki szemeink előtt talán azonnal megjelenik egy vadász szimulátor vagy esetleg egy szarvas család tamagochi rémképe, de szerencsére ennek a szónak van egy további értelmezése is: NATO-kód.
A NATO-kód kifejezést a tagországok hozták létre a kínai és szovjet haditechnikai eszközök megnevezésére, mivel az eredeti típusnevekről esetenként nem is volt pontos információjuk. A kódnevek minden esetben angol főnevek, megkönnyítve ezzel is a azonosítást, illetve a kommunikációban való használatot. A kódnév első karaktere az eszköz jellegére utal, pl. a Tu-134-es szállítórepülő kódja Crusty, ahol a kezdőbetű az angol cargo(=szállító) szóból jön.
Ezzel el is érkeztünk mai témánkhoz. A H betűvel kezdődő kódok ugyanis minden esetben helikopterekre utalnak. Eszerint egy NATO-kód szótárban rákeresve a Hind szóra, (többek között) a Mi-24-es helikoptertípust találjuk. :)
Innen már nem nehéz kitalálni, hogy a fejlesztés alatt álló játékunk (és játékosa) ezzel a helikopterrel fog operálni.
Mit érdemes tudni erről a remek konstrukcióról?
Gondban lennénk, ha egyetlen kifejezéssel megpróbálnánk leírni, mi is pontosan a Mi-24. Repülő harckocsi, repülő erőd, esetleg felfegyverzett csapatszállító? Röviden: mindhárom egyben. Magát a gépet (talán indokolatlanul is) felfegyverzett csapatszállító helikopternek tervezték, továbblépve a Mi-8 (Hip) típus által kijelölt nyomvonalon.
A szovjetek elemezve az amerikaik vietnámi tapasztalatait (az már egy másik kérdés, hogyan jutottak ezekhez hozzá), arra jutottak, hogy szükség lenne egy olyan csapatszállítóra, amely képes a leszállási területét saját fedezőtűzzel biztosítani.
Az első Mi-24 A verzió így erős páncélt és fegyverzetet kapott. A személyzet 3 főt számlált, a pilóta mellett foglalt helyet a lövész másodpilóta, illetve mögöttük a fedélzeti technikus. A pilótafülke mögötti rakodótérben pedig 8 teljes fegyverzetű katonát (egy lövészraj) volt képes szállítani. Mindezek következtében ez a típus meglehetősen nagyra sikerült, az elvártnál sebezhetőbb lett a földi tűztől.
A Mi-8 helikoptereken is használt két TV2-117A gázturbinát a gép tetejére, a pilótafülke mögé építették, a főrotorlapátok átmérője azonban kisebb lett. A farokrotort a zajcsökkentés érdekében a függőleges vezérsík bal oldalán helyezték el. A hárompontos futómű minden eleme egyenként behúzható, a gép törzsébe rejthető. A törzs két oldalán rövid szárnyakat helyeztek el. Ezek a szárnyak amellett, hogy a teljes felhajtóerő mintegy negyedét biztosítják, lehetőséget adnak többféle fegyver felfüggesztésére is.
A Mi-24 A típust 1974-től az NDK-ban állomásozó szovjet csapatok a határvidék felügyelésére használták, de az igazi megmérettetés Afganisztánban következett.
A bevetéseken szerzett tapasztalatok bizonyos módosításokat, korszerűsítéseket tettek szükségessé. Ezek a módosítások eredményezték a Hind-D típus megjelenését. A hajtómű nagyobb teljesítménye mellett a legfontosabb módosítás a harckocsi elleni alkalmazást segítő pilótafülke-elrendezés kialakítása. A korábbi egymás melletti elhelyezést felváltotta a tandem-változat. A fegyverrendszer-operátor fölött és mögött ül a pilóta. Jelentősen javult a pilótafülkék elektronikája, illetve páncélozottsága. A legjelentősebb fegyverzeti módosítás a gép orra alatt elhelyezett 12,7 mm-es Gatling rendszerű elforgatható négycsöves géppuska.
Később az E, illetve F jelzésű típusok további elektronikai, optikai, illetve fegyverzeti módosítást eredményeztek.
A különböző típusokból 2400-nál is többet gyártottak, számos országban - így Magyarországon is - a mai napig hadrendben áll.

A játékban főszereplő Mil Mi-24 Hind-D főbb jellemzői:

Főrotorátmérő: 17,00 m
Farokrotor-átmérő: 3,90 m
Hosszúság: 17,40 m
Szélesség: ~2,00 m
Magasság: 6,50 m
Maximális felszálló tömeg: 11000 kg
Utazósebesség: 295 km/h
Repülési csúcsmagasság: 4500 m
Hatótávolság: 320 km
Első repülés: 1972

Végül egy videó...


... és egy nyugdíjas a Szolnoki Repülőmúzeumból (Fotó: Kis Dávid)


2009. november 24., kedd

Hát akkor kezdjük...

Játékfejlesztés.
Gondolom mindenkinek az életében van olyan szó, kifejezés, amit ha valahol meghall, azonnal megdobban a szíve. Hát valahogy így vagyok ezzel én is.
Probálkoztam már sok mindennel, egyetemen a szakdolgozatom témája 3D FPS játékfejlesztés OpenGL-ben, 2007-ben nehány szentesi barátommal garázs projectet kezdtünk először több, majd egyre kevesebb sikerrel. Jelentkeztem több magyar céghez is, de a BlackHole-on kívül sehova sem sikerült eljutni még interjúra sem.
Sebaj, újjult erővel az eddigi tapasztalatokat feldolgozva most újra belevágok.
A célplatform XNA lesz, a játék címe pedig Hind Action. Itt fogok rendszeresen beszámolni, hogy is haladunk. Igen haladunk, ugyanis egy volt BitBanditás (korábbi garázs csapat) cimborámmal Csiszár Ádámmal együtt fejlesztünk majd. Remelem Ő is posztol majd rendszeresen. Ezúttal nem fogjuk feladni, kívánom, hogy találkozzunk belátható időn belül az XBLA-n.