Levels kommer i grupper. Gruppen kallar vi för en galax och en level är ett solsystem i galaxen. Spelaren väljer vilken level som ska spelas i aktiviteten LevelPicker:
Varje galax har sin "palett", dvs tillhörande rådata som bakgrundsbilder, monster, planeter, ljud mm. Dessa defineras (kommer att defineras) i en xml-fil och förallokeras för att korta ner tiden det tar att starta en level. Varför definera detta i xml-filer? Jo, det är det bästa sättet att peka ut resurser i Android.
Varje level beskrivs i binärfiler. Filen är en serie instruktioner för att skapa en komplett level. Levels och deras tillhörande data kopplas samman i leveltree.xml.
Levelfiler skapas i LevelSerializer (ren java), och packas upp i LevelBuilder (del av Android-koden).
Binärfilens protokoll
Det första som står i filen är dess versionsnummer (en int), som måste vara samma över hela Level-systemet för att fungera. Sedan följer instruktioner i form command-data-command-data osv. Commands är alltid representerade med en Java short, datat på olika form beroende på vad som står där. Instruktionsuppsättningen är självdokumenterande i LevelSerializer.java.
Efter versionsnumret defineras varje GameObject, i den ordning som de ska uppträda under GameObjectManager.
För varje GameObject läses först dess fields in (såsom id, position, hastighet) i valfri ordning. Sedan läses varje GameComponent in i den ordning de ska uppträdai sitt GameObject.
We're a group of merry coders and a designer who are making an Android game based on the game engine from Replica Island (replicaisland.net). Well, we're actually modifying the engine quite a bit, and we'd love to hear your comments!
Bloggarkiv
torsdag 30 december 2010
GameObjectManager
GameObjectManager representerar i princip en hel level. Barnen i GOM är GameObjects, som representerar de olika elementen i spelet, typ en planet, en skurk, spelaren, en bakgrundsbild.
GOM är en nod i GameTree naturligtvis. Strukturen ser sedan ut så här:
Mer än så är det inte. GameComponents är det som ger liv till ett GameObject: RenderComponent håller en bild, MovementComponent beräknar rörelse, ja du fattar.
Detta är anledningen till att deserialization av en level-fil inte är rekursiv: trädet har ett fördefinerat djup.
GOM är en nod i GameTree naturligtvis. Strukturen ser sedan ut så här:
Detta är anledningen till att deserialization av en level-fil inte är rekursiv: trädet har ett fördefinerat djup.
Level system: överblick
Det är så mycket mer än jag trodde!! Detta är en (komplett?) översikt:
GameObjectManager är den nod i Game-trädet som håller alla spelobjekt (GameObjects, som i sin tur har en massa GameComponents som ger den sina egenskaper, typ bild, animation, AI, rörelser, fysik...).
LevelSerializer och LevelBuilder är de som tillverkar respektive packar upp levels från binärfiler.
GameObjectManager är den nod i Game-trädet som håller alla spelobjekt (GameObjects, som i sin tur har en massa GameComponents som ger den sina egenskaper, typ bild, animation, AI, rörelser, fysik...).
LevelSerializer och LevelBuilder är de som tillverkar respektive packar upp levels från binärfiler.
Prenumerera på:
Inlägg (Atom)