Research and Development 1/2011-12/projecten/TeamRocket/MockUp
MockUp
Omdat wij van plan waren een spel te maken hebben wij er voor gekozen niet de standaard opdracht te volgen. Als alternatief hebben we voor een simpel spel gekozen dat in tegenstelling tot de standaard opdracht op een vast interval ververst word.
Inleiding
Een crimineel is op de vlucht, maar Nederland vrees niet! Dolle Misha heeft de achtervolging gestart. Probeer de crimineel te rammen zonder ander verkeer te raken en maak Nederland een veiligere plek!
Besturing
Klik ergens op het scherm om Dolle Misha daar heen te sturen. Als Dolle Misha over de weg rijd zal hij langzaam op de crimineel inlopen, als hij de crimineel ramt word deze uitgeschakkeld. Als Dolle Misha over het gras rijdt zal de crimineel terrein winnen. Als Dolle Misha een andere weggebruiker ramt gaat hij met vervroegd pensioen.
Het spel kan gestopt worden door op 'Stoppen' te drukken. Als het spel over is kan er een nieuw spel worden gestart met 'HERSTARTEN'.
Doel van Mockup
- Het opzetten van een basis Activity met een gameloop.
- De gameloop op een vaste fps te laten draaien (30x per seconde).
- Het tekenen van de game synchroon laten verlopen met de gameloop thread. (vsync)
- Vanaf meerdere computers aan de zelfde broncode werken met behulp van svn.
Wat hebben we geleerd
SVN Probleem
Android projecten bevatten omgevings afhankelijke informatie, hierdoor is het niet mogelijk om project bestanden zonder veranderingen in een andere omgeving te gebruiken. Als er gebruik gemaakt word van source control is het dus niet aan te raden project bestanden te delen want dit geeft het volgende probleem.
- ADMIN: svn mkdir .....
- A: svn check out
- A: android create project .........
- A: svn commit
- B: svn check out
- B: android update project ........
- B: svn commit
- A: svn update
- A: android update project .......
- enz......
Natuurlijk is het gewoon mogelijk om de project bestanden aan de ignore list toe te voegen. Maar omdat veel project parameters niet veranderen is ook dit niet ideaal. Oplossing configure/make (zie make-android).
Teken Probleem.
Als men de standaard teken functionaliteit van de android gebruikt is het alleen toegestaan om vanuit de main thread te tekenen. Het is wel mogelijk om vanuit een andere thread een redraw te forceren met behulp van de postInvalidate methode, deze methode zal de surface opnieuw tekenen vanuit de main thread. Hierdoor zal het tekenen van het model en het updaten van het model paralel gebeuren. Dit kan problemen opleveren, waarbij er voor het tekenen zowel nieuwe als oude informatie gebruikt word. We hebben hiervoor twee oplossingen verzonnen.
- Gebruik synchronized (game_object), in zowel de update als teken methodes.
- Maak gebruik van een gelockedte Canvas, nu kan de thread die lockCanvas aanroept ook in deze canvas tekenen. We updaten dus eerst het model, daarna tekenen we het model.
Wij hebben uiteindelijk voor de tweede methode gekozen omdat de eerste methode nog steeds problemen oplevert als de volgorde van tekenen niet gelijk is aan de volgorde van updaten of als een object andere objecten die al geupdate zijn beinvloed.