Na een leuk begin gemaakt te hebben in de vorige afleveringen komen we nu op een punt waarop we een zeer grote stap gaan maken. Het vliegtuigje is leuk,en de achtergrond zorgt dat het er al redelijk mooi uitziet, maar natuurlijk maakt dit nog geen spel!
Als eerste even wat interactie met de lezers van deze artikelen. Zoals al vermeld in de reacties zal ik in een later artikel wat links geven naar tutorials en andere handige sites die ik zelf heb gebruikt om dit alles aan de praat te krijgen. Waar mogelijk zal ik ook wat kleine ‘code-snippets’ geven en dit zal dus een iets technischer artikel worden, ondanks dat ik de andere artikelen zo open mogelijk probeer te houden voor iedereen die een beetje interesse heeft in het maken van games. Dus laat eventuele vragen of verzoekjes achter in de reacties!
Objectlijsten
Een groot gedeelte van de game-engine is het bijhouden van alle objecten op het scherm. Je moet dit een beetje zien als een stukje programmacode, dat lijsten bijhoudt van alles wat ‘levend’ is. Het probleem met deze lijsten is dat voor elke keer dat we het scherm opnieuw tekenen, de hele lijst anders kan zijn. Tegenstanders vliegen van het scherm af en zijn voor de game-engine dus ‘dood’, maar ook nieuwe tegenstanders vliegen het scherm in en moeten bijgehouden gaan worden door deze lijst.
Waarom dit toch zo’n groot deel van het spel is, is omdat dezelfde techniek gebruikt wordt voor de gebouwen, de vliegtuigen, de helikopters, de bonusobjecten, maar ook voor wat ik altijd de special effects noem. Oftewel: explosies, rookpluimen, en puntentelling.
In het spel gebruiken we twee lijsten: een lijst voor de obstakels waar interactie mee is en een lijst voor de niet interactieve obstakels, die we dus ‘special effects’ noemen.
De game-engine loopt deze lijsten elke ‘update’ af. Een update is niets anders dan het opnieuw tekenen van het scherm, en daarbij alles wat op het scherm is te verplaatsen van punt A naar punt B (zoals ik al heb uitgelegd in het eerste deel van deze serie artikelen). Zodra een object van het scherm af is, door bijvoorbeeld een botsing of omdat hij simpelweg het beeld is uitgevlogen, wordt hij van de lijst verwijderd en weet het spel dat dit object niet meer bijgehouden hoeft te worden.
Special effects
De rook die achter ons vliegtuig hangt is zo’n voorbeeld van een special effect. Een verzameling van willekeurige witte cirkels die op een willekeurige transparante manier worden getekend en dan langzaam per update steeds transparanter worden, totdat ze niet meer zichtbaar zijn. Bij elke update van het spel zetten we een nieuw, willekeurig wit cirkeltje achter het vliegtuig, en op die manier hebben we ons een rookeffect.
Na veel zoekwerk op internet ben ik er uiteindelijk achtergekomen wat de beste manier is om die lijsten op de iPhone bij te houden. Gelukkig is de code van het laten zien van de special effects vrij simpel en werkt het in bijna elke taal hetzelfde (voornamelijk optellen en aftrekken) dus na een klein beetje copy+paste van de Android-versie en daarna wat aanpassingswerkzaamheden hebben we de mooie rookpluim achter ons vliegtuigje hangen.
Het mooiste is natuurlijk dat de code voor het bijhouden van lijsten nu ook gebruikt kan worden voor de obstakels. Na een paar uurtjes kopieer-, plak- en aanpaswerk hebben we zomaar opeens een bijna compleet lijkend spel! We hebben gebouwen, tegenliggers, rookpluimen en nog veel meer. Helaas staat nog niet alles op de juiste plek en werkt nog niet alles zoals het moet, maar het ziet er toch al best leuk uit!
Het erge is natuurlijk dat met al dit spektakel, dat vrij snel ingebouwd is, we nog ver van een volledig spel zijn. Er zijn nog veel kleine foutjes en bugs die we moeten gaan opsporen en oplossen (dat is het nadeel van kopieer- en plakwerk tussen twee verschillende programmeeromgevingen) en daarnaast zal ook erg veel werk gaan zitten in de menu-interface, de online high-scores en al die elementen aan elkaar knopen tot een mooi geheel.
Voor nu is het gewoon even genieten van hoe het spel eruit ziet!
Taalfout gezien of andere suggestie hoe we dit artikel kunnen verbeteren? Laat het ons weten!
Reacties: 16 reacties