actionscript 3 programmeer tips

25 Aug 09 by Jos

Hier, krijg je een aantal tips van me waarmee je wellicht je actionscript 3 programmeerkunsten ietwat kunt verbeteren. Deze post is niet bedoeld voor geavanceerde actionscript 3 programmeurs, maar voor de beginners en overstappers van actionscript 2.

1. probeer niet opnieuw het wiel uit te vinden
Je kunt zelf een fantastische 3D engine in actionscript gaan schrijven. Maar waarom zou je? Er is er inmiddels een aantal die al een tijdje meegaan en nagenoeg alle klappen van de zweep hebben gehad. Ander bekend voorbeeld; een tweening engine. Ook daar zijn er inmiddels zoveel van dat het eigenlijk zonde van de tijd is om er zelf een te gaan schrijven voor gebruik in je projecten. Een goed begin is riaforge.

2. verdeel en heers
Probeer je code -desnoods achteraf- in kleine classes en methods te verdelen. Je code blijft zo overzichtelijk en begrijpelijk. Een ander voordeel is dat je vaak een aantal kleine methods heel handig kan hergebruiken binnnen je class. Als je bijv. steeds een aantal clips gaat uitfaden en daarna verwijderen kun je ook een method maken die je een array met clips kan meegeven. Deze method handelt verder alle benodigde acties af voor elk van de clips en zo kun je ‘m keer op keer hergebruiken.

3. denk vooruit, hergebruik
Als je één keer een groot formulier hebt gechecked, wil je dat bij een nieuw project niet opnieuw programmeren. Bouw daarom je eigen framework op. Maak bijv. een class die alle mogelijke formulier elementen kan valideren. Of een class die de extentie uit een filenaam kan halen. Of wat dacht je van een DataManager class die een xml file inleest en meld wanneer dit gereed is. Als je dit niet steeds opnieuw hoeft te programmeren kun je je telkens meer bezighouden met innovaties.

4. ruim meteen op
Een enorm belangrijk -en nog steeds onderschat- aspect van programmeren is het opruimen. De player ruimt zelf een hoop op als objecten ineens niet meer bestaan, maar je wilt zelf de controle houden en zeker weten dat er geen listeners of timers blijven draaien. Daarom, telkens als je listeners aan objecten hangt, maak dan meteen een method die ze er weer af haalt. Maak je timers aan, maak een method die ze weer weghaalt. Maak bij grotere projecten bijv. een interface class aan die een cleanup method voorschrijft, zodat je telkens gedwongen word de boel op te ruimen. Dit kan het verschil maken tussen een stabiele of labiele applicatie.

5. gebruik proxies
Proxy classes zijn doorgeefluiken. Een goed voorbeeld is een proxy voor een verbinding met iets buiten je applicatie (bijv. een webservice). Stel je hebt een applicatie gemaakt die via verschillende classes met een database praat. Het script dat dit verzorgt is in php geschreven en je roept steeds een script aan met paramaters. Als je nu ooit deze scripts gaat veranderen naar asp, of je zet de boel op een andere plek, moet je in al je classes je methods aanpassen. Misschien gaat de afhandeling wel ineens heel anders of krijg je ineens objecten terug i.p.v. een simpele string.
Als je een procy class schrijft die alle handelingen overneemt en waar dus de volledige communicatie in zit met al deze scripts, hoef je in je applicatie classes alleen de proxy class aan te spreken. Verandert de backend volledig, dan hoef je alleen je proxy aan te passen (of je schrijft een nieuwe proxy, zodat je kunt wisselen).
Een simpeler voorbeeld is die ik zelf vaak gebruik: een proxy class voor statistieken. Deze class koppel ik in eerste instantie aan Google Analytics, zodat ik de proxy class kan opgeven wat ik wil meten en Google dit opslaat. Als ik nu een ander systeem kies, kan ik dit gewoon in mijn proxy class aanpassen, zonder dat de applicatie daarvoor op de schop hoeft.

6. doe onderzoek
Vaak heb je iets al eens geprogrammeerd en lijkt het voor de hand te liggen om dat weer zo te doen. Heel goed in het kader van hergebruik. Maar, elke situatie is een nieuwe en soms moet het anders aangepakt worden. Maak daarom zoveel mogelijk tests en kijk goed hoe je applicatie reageert m.b.t. geheugengebruik, framerate, stabiliteit, etc. Probeer bij een project met veel video wat beter werkt: video’s eerst helemaal inladen, of streamen met een juiste buffer instelling. Probeer in een game wat stabieler is, een vliegtuigje elke cycle naar al z’n enemies laten kijken of ie ze raakt, of een klein aantal denkbeeldige vlakken bijhouden waarin elke enemy z’n positie opslaat. Programmeer het en kijk wat er gebeurt.

7. gebruik een debugger
Onderschat nooit de kracht van debugging. Er wordt je ineens zoveel duidelijk als je ziet dat het bericht dat je wilt laten zien niet getoond wordt, dus dat je method helemaal niet eens wordt uitgevoerd. Je zult een hoop aha-erlebenissen beleven als je flink “om je probleem heen” debugt. Je kunt trace gebruiken, maar ik raad je echt een debugger / logger aan. Vaak kun je daar met kleuren veel duidelijkheid scheppen in je output. Daarnaast zijn deze eigenlijk allemaal voorzien van recursieve object explorers. Je geeft gewoon een object aan de debugger en in je output krijg je netjes alle properties en methods etc. te zien, zo diep als je aangeeft.

8. try … catch en if !null
Omdat actionscript 3 veel stricter is dan zijn oude vader, actionscript 2 en de player vanaf versie 9 veel professioneler en gestructureerder is dan oudere, bestaan er tegenwoordig runtime errors. “Vroeger” liep de applicatie gewoon vast en daarmee meteen je browser. Nu zie je runtime errors in een window met de mogelijkheid alle verdere scripting uit te schakelen. Deze meldingen wil je niet aan je gebruikers laten zien. Je wilt ze afvangen. Dat kan met try & catch of door na te kijken of je objecten wel bestaan.
Stel je hebt een flink aantal objecten die op elk moment verwijderd kunnen worden door bijv. interactie. Als je dan een timer hebt lopen die alle objecten telkens update zul je fouten krijgen op het moment dat er één wegvalt. Je moet in je update loop dus een check inbouwen of het object nog wel bestaan. Dat kan door te kijken of het object niet null is. Je kunt ook een array met de objecten bijhouden en als het object wordt verwijderd deze array updaten.
Als je dit soort situaties niet zelf in de hand hebt, kun je try & catch gebruiken. Je probeert daarmee de actie die je wilt uitvoeren en als dit niet lukt vang je de runtime error af en doe je er mee wat je wilt in je catch. Heel handig als je dit in een debugger met een rode kleur afbeeld, zodat je meteen ziet dat er iets misgaat.

One comment

Leave a comment

Gers? Stuur 'm door!
E-mail vriend(in)
Bericht
Veiligheidscode