G-Space

Navn: G-Space
Sprog: C#
API: XNA
Grafik: Henning Mortensen (mig).
Lydeffekter fra: http://www.freesound.org/
Ingame Musik: Kevin MacLeod http://incompetech.com/m/c/royalty-free/
HighScore Musik: DeceasedSuperiorTechnician http://www.nosoapradio.us/
Dato: December 2010

Jeg har gennem tiderne været meget tilfredse med OpenGL til alle mine projekter der skulle bruge noget grafik, men nu da jeg efterhånden kun koder i C#, og har jeg haft lidt problemer med at finde en god .NET wrapper til OpenGL, har jeg ledt efter et alternativ og er stødte på XNA. Det er nemt, hurtigt og tillader mig at gøre de fleste, af de ting jeg har brug for, på den halve tid. Alt basal initialisering som man selv skulle sørge for i både OpenGL og DirectX er gjort for dig, og så er det også muligt at porte til Windows Mobile og Xbox. 🙂 Så jeg var selvfølgelig nødt til at forsøge at lave et lille spil. Og som altid startede jeg ud med et proof of concept, og endte med et projekt der bare fortsatte med at vokse og vokse. Men med en lille skridt tilbage for at få overblikket, fik jeg fremtænkt mig et godt GameObject der dækkede hvad jeg havde brug for, og så var det bare at kode løs. Og det er så blevet mit første spilbare XNA spil.

Der var en masse ændringsønsker fra “Beta testere”.. Altså venner. Såsom fuld skærm, power ups, bedre Alien skud mønster. Men der blev ikke fundet nogle reelle fejl. 🙂

Den mest udfordrende del at få til at virke som jeg ville have det, var at jeg ville have bunkerne til at gå i stykker hvor de blev ramt og ikke i sektioner. Jeg endte med at gøre bunker til et RenderTarget ved hjælp af en shader der fik placeringen af missilet og som så testede for hit på pixel niveau. Ved hit blev den del af billedet der skulle fjernes gjort gennemsigtig i forbindelse med at det blev tegnet til det RenderTarget der blev brugt til at tegne bunkeren på skærmen. Jeg kunne have brugt en ping-pong løsning med skiftende RenderTargets, men da løsningen virkede, og det ikke ligefrem er fordi der er noget i spillet der er tidskritiske, har jeg ikke gjort mere for at optimere.

Et af de mere vanskelige problemer med bunker løsningen var, at jeg ikke kunne få baggrunden af det første RenderTarget til at være gennemsigtig. Efter at have brugt en masse tid på at google, spurgte jeg på det officielle XNA forum, og ingen af de foreslåede løsninger virkede, undtagen ét! ”Skift til XNA 4,0″ sagde han, så det prøvede jeg, og med de få nødvendige ændringer (så vidt jeg husker, var der kun små ændringer til mine Texture2D eller RenderTarget definitioner), og så virkede det! 🙂 Mærkeligt, men det gjorde det. Eneste forskel var V4.0 mod V3.0.

Jeg har ikke planer om at udvikle mere på spillet da jeg allerede har lært meget og ved at der er så mange ting som jeg skulle havde gjort anderledes, så skulle det være en anden gang vil jeg starte fra bunden igen. Så jeg kunne få en ordentlig struktur og have Garbage Collectoren i baghovedet da den helst ikke skal begynde at ”collect” imens spillet køre som lige nu kan ses som små jitters når man spiller.

Henning

Screenshot(s)


    Leave a Reply

    Your email address will not be published. Required fields are marked *