Mini Plane: het ontwikkelen van een iPhone-game, deel 4 (dagboek)

Pascal Bestebroer vertelt in zijn ontwikkeldagboek hoe lastig het is om tekst en geluid in een applicatie te maken. Het plan is om de game Mini Plane, dat al op Android beschikbaar is, om te zetten naar de iPhone. Wat kom je als ontwikkelaar daarbij tegen?
Pascal Bestebroer - · Laatst bijgewerkt:

mini plane iphone game overIn dit dagboek lees je over de ontwikkeling van een iPhone-game, Mini Plane. In eerdere afleveringen zijn special effects, achtergronden en bewegende objecten al aan de orde gekomen. Deze keer zijn tekst en geluid aan de beurt.
Eigenlijk heb ik tot nu toe de vrij simpele dingen zitten bouwen in het spel. Hier en daar heb ik bepaalde dingen overgeslagen, omdat het even iets lastiger was dan een copy/paste-operatie. Maar hoe ver je ze ook vooruitschuift, op den duur kom je ze toch tegen. Dat betekent dat we nu toch echt tekst op het scherm moeten hebben en ook graag geluid willen horen.

Tekst toveren

Op Android is het vrij simpel om te werken met tekst op het scherm: je kun alle lettertypes gebruiken die je normaal ook gebruikt voor bijvoorbeeld tekst-verwerken. Gewoon simpel het lettertype-bestandje aan je project toevoegen, opgeven dat je een bepaald lettertype wilt gebruiken en klaar. Helaas is dat op de iPhone niet mogelijk. Er zijn maar een paar lettertypes die je kunt gebruiken. Anders zul je andere oplossingen moeten vinden waarbij je grote plaatjes maakt vol met letters en dan de letters uitknipt als je ze nodig hebt. Handig is anders.

Na verschillende manieren te onderzoeken ben ik uiteindelijk beland bij een oplossing die redelijk flexibel is, maar naar mijn mening nog steeds niet goed genoeg. Voor de plaatjes maakte ik al gebruik van een Texture2D-class van Apple zelf. Een class kun je vergelijken met een omschrijving van een voorwerp. Dus, even voor mensen die nooit programmeren: stel ik wil een doodnormale hamer hebben, dan gebruik ik de Hamer-class die als beschrijving heeft :

Hamer is {
houten steel
grote metalen bovenkant
doet auw als het je raakt
}

Ik kan vervolgens twintig van die hamers in mijn spel stoppen, ze werken allemaal hetzelfde en zien er hetzelfde uit. Mijn Texture2D is dus een beschrijving van hoe plaatjes op het scherm komen, en heeft ook nog eens de optie om een plaatje te maken aan de hand van een stukje tekst. Het nadeel van deze oplossing voor tekst is dat ik van te voren al moet aangeven hoe groot mijn tekst is en welke tekst het is. Daarna is het niet meer aan te passen tenzij ik een nieuw plaatje maak met de nieuwe tekst.

Niet een super oplossing, maar hij lijkt wel te werken want even later heb ik een Score op het scherm staan, puntentelling in het spel en meldingen als “checkpoint!” en “you died!”.

Klik om inhoud van YouTube te tonen.
Learn more in YouTube’s privacy policy.

Geluid

Het geluid is even een lastig probleem geweest, het duurde vrij lang voor ik het aan de praat kreeg. Er zijn ook hier weer meerdere oplossingen om geluid in je spel te krijgen, maar niet alles is erg bruikbaar voor snelle spelletjes waarbij meerdere geluiden willekeurig afgespeeld moeten worden en mogelijk ook nog allemaal tegelijk.

Uiteindelijk kwam ik ook hier weer op een stukje code van Apple zelf uit, die het mogelijk maakt om geluid af te spelen via OpenAL. Dit is een open standaard die op meerdere systemen gebruikt wordt, dus er is gelukkig ook genoeg informatie over te vinden. Helaas kwam ik er zelfs met de voorbeelden niet helemaal uit en heb hier echt uren naar zitten zoeken. Meestal helpt het om bij een groot programmeerprobleem even alles te laten voor wat het is en iets anders te gaan doen om er later op terug te komen.

Tussendoor heb ik de hele programmacode zitten opschonen en aanpassen, zodat de structuur erg veel lijkt op die van de Android-versie. Dit is een structuur die ik al jaren gebruik (sinds we onze eerste J2ME mobiele spelletjes maakten) en het is dus erg slim om dat zoveel mogelijk hetzelfde te houden.

Een dag later ben ik weer terug in het geluid gedoken om er achter te komen, binnen letterlijk 5 minuten, dat ik een fout gemaakt had in de bestandsnamen… Dus het geluid was simpelweg niet te horen, omdat de geluidsbestanden niet ingeladen werden… slim! De geluidsbestanden moeten in het AIFF-formaat, en helaas was ik vergeten dat er een dubbele-F staat.

In het volgende artikel gaan we maar eens beginnen met de interface, een belangrijk gedeelte van het spel!

Eerder in deze serie verschenen:

Reacties: 11 reacties

Reacties zijn gesloten voor dit artikel.