Stagerapport. Onderzoek naar en ontwikkeling van een 2D webgame: PHL Adventure

Maat: px
Weergave met pagina beginnen:

Download "Stagerapport. Onderzoek naar en ontwikkeling van een 2D webgame: PHL Adventure"

Transcriptie

1 Stagerapport Onderzoek naar en ontwikkeling van een 2D webgame: PHL Adventure Auteur: Steven Houben Datum: 16 juni 2008, Hasselt Instelling: Provinciale Hogeschool Limburg Stagebedrijf: Peyote / Onderzoeksinstituut voor Toegepaste Informatica (tinfo) Stagelector: Jan Willekens Stagementor: Frank Vangeirt

2

3 VOORWOORD Sinds 2 jaar ligt mijn persoonlijke interesse binnen de informatica op het vlak van visualisatie en simulatie en vooral op het onderzoek daar rond. Als student aan de PHL ben ik aanvankelijk vrij weinig in contact gekomen met deze technologieën omdat de opleiding vooral gericht is op bedrijfsapplicaties en in mindere mate op deze andere technologieën. Via de open source communities ben ik wel in contact gekomen met deze aspecten van de informatica. Als eerste experiment heb ik een game engine ontwikkeld op het.net framework op basis van GDI+. 1 Ik was dan ook enthousiast toen ik vernam dat er een mogelijkheid was om onderzoek te doen naar deze technologieën in zowel het project als tijdens de stage. Ondanks het feit dat ik weinig ervaring had met webbased games leek het me een mooie uitdaging om dit project tot een goed einde te brengen. 1 GDI+ (Graphics Device Interface): Eén van de 3 core componenten van Windows, gebruikt voor visuele rendering.

4

5 INHOUDSTABEL 1 INLEIDING Bedrijfsvoorstelling Concept fase Project fase FLASH PLAYER 9 & ACTIONSCRIPT Flash cs Actionscript Hiërarchie D ISOMETRIC MAP SCROLLING TILE BASED GAME ENGINE tweedimensionaal (2D) Map scrolling Tile based Game (computerspel) Engine FLASH GAME ENGINE Core Collections Components Data IO Math Objects Physics Rendering Sound Global UI (user interface) menu Components... 35

6 4.4 Game Collections Data Gameplay IO (input/output Objects PHL ADVENTURE GAME Preload Spel Declaratie en initialisatie Draw call Interactie en gameplay Resources Toolkit Activiteiten CONCLUSSIE EN AANBEVELINGEN BESLUIT REFERENTIES BIJLAGEN Bijlage Bijlage Bijlage Bijlage Bijlage Bijlage Bijlage

7 FIGUREN Figuur 1: Schermafdruk van de Flash IDE Figuur 2: Schematische voorstelling van de werking van de Flash compiler. Actionscript klassen worden aan een flash designer object gekoppeld en zo via de flash IDE gecompileerd tot een uitvoerbaar shockwave object Figuur 3: Hiërarchie van de standaard ingebouwde display klasse. De tob level klasse is het object. Dit object is de superklasse van alle andere klassen in Actionscript Figuur 4: Schematische voorstelling van het OOP model. Dit model toont aan hoe de onderlinge hiërarchie in het OOP model werkt. Wanneer een bovenliggend klasse een onderliggend klasse wil aanspreken kan dit via de methoden en eigenschappen van die klasse. Een onderliggende klasse die de bovenliggende klasse wil aanspreken moet gebruik maken van het DOM event model Figuur 5: Tweedimensionale vorm Figuur 6: Voorstelling van een axonometrische projectie waarbij alle hoeken tussen de geprojecteerde assen 120 zijn Figuur 7: Transpositie van tweedimensionale projectie naar een isometrische projectie Figuur 8: Theoretische isometrische transitie. Door de gestandaardiseerde isometrische formules toe te passen op lineaire tweedimensionale x- en y-waarden verplaatsen de assen zich naar een isometrische projectie Figuur 9: Schematische voorstelling van lineaire beweging. De blauwe pijl duidt een mogelijke beweging aan van de speler. De speler kan dus vrij bewegen in alle richtingen binnen het zichtbare scherm Figuur 10: Schematische voorstelling van lineaire beweging door middel van mapbeweging. De groene pijlen duiden de gecentraliseerde positie van de speler aan. Wanneer de speler naar rechts beweegt wordt de viewport geüpdate in dezelfde richting als de speler. De map zelf beweegt echter in de tegenovergestelde richting. Hierdoor wordt de illusie van beweging gecreëerd Figuur 11: Schematische voorstelling van de architectuur van de engine. De engine en het spel bestaat ui 4 belangrijke packages die elke een specifiek functie hebben. De resources is een verzameling van alle data noodzakelijk voor het functioneren van het spel en de engine Figuur 12: De constructor van de GenericCollection klasse. In de constructor wordt een required type meegestuurd. Dit type vormt de basis van de runtime type check Figuur 13: Runtime type checking in de GenericCollection klasse. Voor een object toegevoegd wordt aan de collectie controleert de functie eerst het type van het object Figuur 14: De drawing klasse. Deze klasse implementeert 4 synchrone Figuur 15: Implementatie van een klasse op basis van de drawing klasse. Deze klasse overschrijft 1 call en tekent vervolgens een object door de _draw methode van de super klasse op te roepen Figuur 16: Voorbeeld van de werking van de statische BitmapCache klasse. Deze klasseis een statische verzameling van textures Figuur 17: Voorbeeld van een statische klasse: de ItemType klasse

8 Figuur 18: Schermafdruk van het menu Figuur 19: Schermafdruk van het selectiemenu Figuur 20: Schermafdruk van het frame Figuur 21: Schermafdruk van de mp3 speler Figuur 22: Spectrum functie. Deze functie visualiseert een geluidsbestand Figuur 23: Schematische voorstelling van de werking van de inventory Figuur 24: Schermafdruk van het messageframe Figuur 25: AddTile methode van de tileset klasse Figuur 26: Schematische voorstelling van de datastructuur van de engine. De php klassen maken via een default gateway een verbinding met de AMFPHP engine die op zijn beurt de verbinding met de mysql databank tot stand brengt via ingebouwd php klassen Figuur 27: Intersectie tussen 2 objecten Figuur 28: Schematische voorstelling van het collision detection model. In dit geval kan de speler enkel naar boven, naar links of naar onder bewegen Figuur 29: Eigenschappen van de entity klasse. In deze eigenschappen worden de matrixwaarden van de aanliggende tiles bijgehouden Figuur 30: Schematische voorstelling van de diepteverwerking bij een beweging naar rechts Figuur 31: Schematisch voorstelling van de displaylist. De displaylist kan enkel displayobjecten bevatten en de indices dienen opeenvo<lgend te zijn Figuur 32: Aansluitende diepte indices in een tile based omgeving Figuur 33: Bubble Sort algoritme in Actionscript Figuur 34: SchermAfdruk van de tile klasse. Deze klasse heeft een reeks eigenschappen die specifiek voor dit object van toepassing zijn Figuur 35: Schermafdruk van de minimap Figuur 36: Een objectproxy in de user klasse. Deze klasse beheert alle eigenschappen van de user klasse. Wanneer ze een verandering detecteert in de eigenschappen van de user klasse dispatcht ze een event Figuur 37: Schematische voorstelling van de preload klasse. De gebruiker bepaalt de data via de user interface van het spel waarmee de engine werkt Figuur 38: Hiërarchische voorstelling van de loadmanager klasse. De loadmanager verzamelt alle laders in één gecentraliseerde klasse Figuur 39: Declaraties uit de game klasse Figuur 40: Verschil in declaraties Figuur 41: Initialisatie van de event listeners. Deze listeners zijn essentieel voor de engine omdat deze alle data uit deze event listeners haalt Figuur 42: Schematische voorstelling van de viewport. Om de verschillende punten van de viewport te berekenen vetrekken we vanuit de tile (of matrixwaarde) van de speler, die steeds centraal staat Figuur 43: De createtile() functie. Deze functie tekent een nieuwe tile op basis van de x- en y-waarden en de richting Figuur 44: De draw call van PHL webgame. De draw functie tekent de initiële map voordat het spel begint Figuur 45: Schematische voorstelling van het actiemodel van de engine

9 Figuur 46: Keyboard event handler. De handler vangt het event op en ontleed het eventobject. Op basis van filtering kent de handler een specifieke actie toe Figuur 47: Schematische voorstelling van de werking van het DTS systeem. Dit systeem laat toe om enkel de één rij of kolom tiles te verwijderen en één rij of kolom tiles bij te tekenen Figuur 48: Een onderdeel van de move() functie. Op basis van de richting berekent deze functie de verplaatsing van het object, de map en de viewport Figuur 49: De processitem() functie controleert het gevonden object en koppelt hieraan een actie Figuur 50: Een deel van de domission() functie. Deze functie regelt welk missie met welk objectief aangemaakt moet worden Figuur 51: Schermafdruk van de map editor Figuur 52: Schermafdruk van de mission editor TABELLEN Tabel 1: Onderzoek naar de verschillen tussen de mogelijke programmeeromgevingen Tabel 2 : Language karakteristieken van Actionscript3 (Grossman,Huang 2006) Tabel 3: Standaard isometrische formules Tabel 4: Matrix vs Tilemap Tabel 5: Structuur van een map bestand Tabel 6: Structuur van een texturelist bestand Tabel 7: Isometrische formules waarbij geen rekening wordt gehouden met de grootte van een tile Tabel 8: Voorbeeld van de werking van de stringsearch klasse De maxtrixwaarde wordt opgedeeld in 3 afzonderlijk waarden Tabel 9: Formules die de viewport berekenen Tabel 10: Voorbeeld van een berekening van één viewport punt Tabel 11: Formules voor de berekening van de viewport offset GRAFIEKEN Grafiek 1: Frames per second bij de aanwezigheid en afwezigheid van een realtime minimap

10

11 1 INLEIDING In een industrie waar jaarlijks honderden nieuwe geavanceerde 3D games verschijnen, zien we de laatste jaren een opmerkelijke trend. Steeds meer bedrijven bieden via een website spelletjes aan, onder de web 2.0 noemer, die in een webbrowser gespeeld kunnen worden. Jaarlijks lokken deze websites miljoenen spelers van alle leeftijden. Door de lage drempel, door de eenvoudige gameplay 2 en door de platformonafhankelijkheid 3 zijn deze spelletjes enorm populair bij gebruikers die vroeger geen interesse in games vertoonden. Deze spelletjes zijn vaak gratis doordat ze omgeven zijn door reclame en advertenties voor bedrijven of diensten. Ook de introductie van de mobiele telefoon (GSM) biedt een nieuw platform aan om spelletjes op te draaien. Deze spelletjes vertonen veel gelijkenissen met de spelletjes die aangeboden worden via de webbrowser en zijn meestal in dezelfde taal geprogrammeerd (Java/Flash/...). Verschillende grote game studio s spelen in op deze nieuwe markt. Zo biedt Electronic Arts verschillende games aan die via de webbrowser kunnen gedownload worden en speelbaar zijn op de mobiele telefoon, PDA of webbrowser. Zelfs ID software heeft aangekondigd hun legendarisch game QUAKE III ARENA te poorten en gratis aan te bieden via webbrowser onder de naam Quake Zero (Carmack, 2007). Deze spelletjes zijn vaak eenvoudig van aard en gebaseerd op of zelfs een kloon van spelletjes uit de jaren 90. De teken-, reken- en geheugentechnieken die op deze nieuwe platforms gebruikt worden, zijn identiek aan de technieken die tien jaar geleden beschikbaar waren voor de computer. Bovendien is de stijgende trend dat steeds meer bedrijven vragende partij zijn om webapplicaties te gaan visualiseren, om op deze manier hun klanten een verhoogde interactiviteit aan te kunnen bieden (Patch, 2006). Klanten gaan via sterk visuele applicaties veel sneller en veel gebruiksvriendelijker data en informatie op maat krijgen. Ook verlopen klassieke onderzoeksmethoden, zoals bijvoorbeeld een enquête, via visualisatie efficiënter en aangenamer. Game ontwikkeling is een tak in de informaticawereld die in België helaas nog veel te weinig aan bod komt. Maar de laatste jaren kunnen we een positieve evolutie betreffende game ontwikkeling vaststellen. Meer en meer bedrijven gaan zich verdiepen in visualisatie- en simulatietechnieken maar ook de overheid speelt in op dit nieuwe concept. Het Onderzoeksinstituut voor Toegepaste Informatica(TINFO) dat verbonden is met de PHL is in deze context samen met het bedrijf Peyote een onderzoeksproject gestart naar de ontwikkeling van een webgame. Gedurende de stageperiode hebben 3 collega s en ikzelf dit project verder uitgewerkt tot een werkend prototype. Wij hebben dan ook tijdens de stageperiode het volledige vertrouwen maar ook de verantwoordelijkheid gekregen van onze stagebegeleider Frank Vangeirt om dit project zelfstandig uit te werken. In dit stagerapport ga ik trachten de verschillende aspecten van dit onderzoeksproject te doorlopen en een structureel beeld te geven van werking van het prototype van de PHL Webgame. 2 Gameplay: De manier waarop het spel reageert of de manier waarop het spel gespeeld wordt. 3 Platformonafhankelijk: Een toepassing die op alle besturingssystemen gebruikt kan worden. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 11

12 1.1 BEDRIJFSVOORSTELLING Het Onderzoeksinstituut voor Toegepaste Informatica(TINFO) is verbonden aan de opleiding Toegepaste Informatica (TIN) van het departement Handelswetenschappen en Bedrijfskunde van de Provinciale Hogeschool Limburg (PHL). Het instituut werd opgestart in 2005 met Marcel Gaens als eerste onderzoekscoördinator. In oktober 2007 werd Marcel Gaens opgevolgd door Frank Van Geirt. TINFO is actief op het gebied van toegepast onderzoek en dienstverlening in het domein van Information Communication Technology (ICT). Binnen deze ICT-sector wordt gewerkt in verschillende onderzoeksdomeinen. Voor elk van de onderzoeksdomeinen legt TINFO zich toe op projectmatig en toegepast onderzoekswerk in samenwerking met partners uit de openbare en private sector. Als onderzoeksinstituut willen we bovendien een substantiële bijdrage leveren aan het creëren van een breed maatschappelijk draagvlak voor ICT integratie in alle facetten van het dagdagelijkse leven. Als onderzoeksinstituut is het ons doel om de specifieke ICT-problemen van bedrijven op te lossen via beschikbare applicaties. Pas wanneer de op de markt beschikbare applicaties niet voldoen aan de eisen, wordt een ontwikkeltraject opgestart. In het speerpunt Netwerken en mobiele communicatie wordt dan ook onderzoek en dienstverlening verricht rond mobiele applicaties voor laptops, PDA, smartphone, sensoren, RFID, e.d. Binnen dit speerpunt wordt voornamelijk samengewerkt met het onderzoeksinstituut ArcK van het departement Architectuur, Interieurarchitectuur en Beeldende Kunst. De verschillende onderzoeksprojecten situeren zich binnen het kader van game engines, classificatie van games en de ontwikkeling van games en simulaties. Het gebruik van (databank gestuurde) webapplicaties zit in stijgende lijn. Meer en meer klassieke desktop applicaties vinden hun tegenhanger op het internet. In dit domein heeft het onderzoeksinstituut al heel wat kennis en expertise opgedaan. Verder wordt binnen dit speerpunt onderzoek uitgevoerd naar nieuwe technieken die op het internet kunnen toegepast worden, onder de noemer web3d. Peyote is een studio die gespecialiseerd is in 3D computeranimatie en visualisatie. De studio werd in 2000 opgericht door David Molenberghs en was toen gehuisvest in de Brusselse Dansaertwijk. Er wordt vooral karakteranimatie en 3D content gemaakt voor film en tv. Een hoogtepunt was de restyling van TV1 (nu één) waarvoor Peyote enkele idents aanleverde. In 2004 verhuisde Peyote naar Hasselt en werd er begonnen aan de 18 maanden durende productie van imagic, een virtuele trainingssimulator voor wielrenners. Hiervoor werden 3 medewerkers in dienst genomen, die na het project weer zullen afvloeien. Nieuwe contacten zorgen ervoor dat er meer en meer opdrachten ontstaan voor visualisaties rond animaties. In de toekomst wil Peyote zich specialiseren in realistische, industriële visualisaties. Ondertussen wordt David Molenberghs gevraagd om een gastcollege 3D modeling te geven aan de technische hogeschool GroepT te Leuven. Hier raakt hij betrokken bij projecten betreffende interactiviteit en simulatie. Dit stimuleert hem om nieuwe grafische en technische grenzen te verkennen in het vakgebied 3D. Momenteel start Peyote samen met de onderzoekscel TINFO van de PHL een onderzoek betreffende 3D op het internet. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 12

13 1.2 CONCEPT FASE Een computerspel en de ontwikkeling ervan wordt in grote mate bepaald door het concept. Dit concept moet een omschrijving zijn van de grafische mogelijkheden, de gameplay, de User interfaces,... kortom, alles wat betrekking heeft op hoe het spel eruit ziet en hoe het spel gespeeld wordt. Het ontwerpen van dit concept was een departementsoverschrijdende samenwerking tussen studenten van het Departement Beeldende Kunst en studenten van het Departement Handelswetenschappen. Studenten van verschillende afstudeerrichtingen van de twee departementen werden in kleine groepjes opgedeeld met als opdracht elk een eigen concept te bedenken. Er werden wekelijkse vergaderingen gehouden waarin besproken werd hoe het spel er zou kunnen uitzien. Al snel werd de grote kloof tussen de twee departementen duidelijk. Enerzijds hadden de studenten van het Departement Beeldende Kunst goede ideeën die in de praktijk niet haalbaar waren. Anderzijds hadden de studenten van het Departement Handelswetenschappen er een minimalistische kijk op. Deze contrasten zorgden voor de ideale combinatie tussen creativiteit enerzijds en haalbaarheid anderzijds. Uiteindelijk mocht elke groep een presentatie geven waarin de groep hun concept mocht verdedigen voor een jury. Deze jury besliste dan welk concept uiteindelijk gebruikt werd voor het spel. Na keuze van één concept, werd deze door de jury verder aangevuld met suggesties en ideeën. Het gekozen concept diende vervolgens als basis voor het draaiboek waarop het spel gebaseerd zou worden. Een draaiboek is een verzameling van alle zaken die in het spel verwerkt moeten worden. Het draaiboek van dit spel is initieel gestart door de studenten van beeldende kunst en later werd het verder uitgewerkt door Mr.Van Geirt. (bijlage 7) Het verhaal achter het concept is dat onze school bekend staat tot in de ruimte voor zijn intelligente leerlingen. Op een dag dient een buitenaards wezen zich aan om op de PHL te studeren. Hij moet hiervoor eerst een toelatingsproef afleggen. Vooraleer hij hieraan kan beginnen, moet hij informatie verzamelen over de verschillende departementen en afstudeerrichtingen (Van Geirt, 2008). Het idee voor een webgame is eigenlijk voortgevloeid uit de vraag hoe de PHL afstuderende studenten uit het secundaire onderwijs kan bevragen en motiveren om te studeren aan de PHL. Studenten die nog op zoek zijn naar een school om hun hogere studies te doen kunnen via deze webgame op een interactieve en gevisualiseerde manier de campus en de studierichtingen verkennen. Het spel leidt de studenten door een geabstraheerde voorstelling van de campus. Door middel van opdrachten kan de student de verschillende studierichtingen verkennen en zo interactief ontdekken waar zijn interesses nu precies liggen. Elke opdracht is een minigame dat een representatie is van één specifieke studierichting. Elke oplossing van een minigame is dan ook uniek en vraagt dan ook andere werk- en benaderingsmethoden. Na het spelen van deze webgame zou de student enerzijds moeten weten welke studierichtingen de PHL nu precies aanbiedt en anderzijds waar zijn persoonlijke interesses nu precies liggen. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 13

14 1.3 PROJECT FASE Het onderzoeksproject is reeds gestart in de projectperiode gedurende het 2 de trimester. In deze periode zijn verschillende acpecten aan bod gekomen. Allereerst hebben verschillende collega s zich gedurende de projectfase bezig gehouden met het opmaken van een analyse. Het grote probleem met deze analyse was dat er nog geen architectuur bestond of uitgedacht was die voor dit onderzoeksproject van toepassing was. Er werd dan ook besloten de analyse te beschouwen als een generische benadering van de uiteindelijke gameplay of met andere woorden een schematisch voorstelling van het draaiboek. De volgende stap in dit proces was het aanmaken van een database op basis van de eerder gemaakte analyse. Er werd gekozen voor een mysql database omgeving daar deze opensource beschikbaar is. Deze database is volledige beheerbaar met een webbased applicatie. De opdracht was duidelijk: Bouw een platformonafhankelijk modulair spel dat in de browser wordt gespeeld. Dit betekende in de praktijk dat we op zoek moesten gaan naar een programmeeromgeving die op alle besturingssystemen kan functioneren en in alle webbrowsers speelbaar is. Voor we overgegaan zijn tot het maken van een keuze is er een vergelijkende studie gedaan tussen de verschillende mogelijkheden. De verschillende omgevingen die in aanmerking kwamen zijn met elkaar vergeleken op volgende punten: Platformonafhankelijkheid Kan de omgeving op alle besturingssystemen worden gebruikt? Browser support Wordt de omgeving door alle browsers ondersteund? Flexibiliteit Is de programmeeromgeving flexibel en snel aan te leren? OOP Voldoet de programmeeromgeving aan de OOP 4 principes Support Is er een actieve community die deze programmeeromgeving ondersteund? Flash Actionscript.Net silverlight Javascript Shockwave Platformonafhankelijk x / x x Browser support x x x / Flexibliteit x x / / OOP x x x / Support x x / / Tabel 1: Onderzoek naar de verschillen tussen de mogelijke programmeeromgevingen. 4 OOP (Object Oriented Programming):OOP is een programmeerparadigma dat gebruikt maakt van objecten en de interactie tussen de objecten. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 14

15 Zoals in tabel 1 aangetoond wordt, is Flash Actionscript 3 de meeste aangewezen omgeving voor dit onderzoeksproject. De omgeving voldoet immers aan volgende aspecten: Platformonafhankelijkheid Wordt ondersteund door alle besturingssystemen. Browser support Wordt ondersteund door alle webbrowsers. 850 miljoen gebruikers hebben de plug-in al geïnstalleerd en de meeste webbrowsers installeren de plug-in standaard mee. Flexibiliteit Actionscript is een flexibele programmeertaal en is vrij eenvoudig aan te leren. OOP Actionscript 3 is gebaseerd op de ECMA 3 standaarden 5. Deze standaard voorziet een OOP model, een DOM Event model 6 en een EX4 xml model 7. Support Flash Actionscript kent een grote community. Vooraleer overgegaan kan worden tot het ontwikkelen van een spel is het noodzakelijk over een stabiele engine te beschikken waarop dit spel gebouwd kan worden. Allereerst zijn we begonnen met het zoeken naar een opensource engine die aan onze specificaties voldeed. Helaas hebben we tijdens onze zoektocht geen valabele engine gevonden. Er werd gekeken naar enkele bestaande opensource engines waaronder Sandy 3D, Papervision 3D,The fisix engine en Pixlib. De meeste van deze engines zijn geschreven voor Actionscript 2 en later vertaald naar Actionscript 3. Ze zijn allen zeer ingewikkeld en zijn vooral gericht op visuele rendering 8 en in mindere mate op gameplay. Ook zijn ze vooral bedoeld voor 3D omgevingen. Daarom werd beslist een eigen engine te ontwerpen op basis van een zelf uitgedachte architectuur die alle specificaties bezit nodig om het PHL Adventure Game te bouwen. Tijdens de projectperiode is er vooral veel onderzoek gedaan naar het implementeren van theoretische modellen rond 2D games in Actionscript 3. Enkele voorbeelden van deze modellen zijn isometrie (WikiPedia,2007), Tile-based isometrie (PA, 2005), Matrix rekenen (Weeks, 1997), Depth sorting (Lamont, 2007) en Isometrische beweging (Kirupa, 2008). Uiteindelijk werd aan het aan einde van deze periode een prototype van de engine afgeleverd met daarop 3 werkende applicaties: Prototype van PHL Adventure Game Pacman Logistics 5 ECMA (European Computer Manufacturers Association): Private standaardenorganisatie voor informatie- en communicatiesystemen. 6 DOM(Document Object Model) Event Model: Event driven W3C standaard die een hiërarchische event-based model aanbiedt. 7 E4X (ECMAScript for XML): ECMA extensie die native xml integreert in ECMA programmeeromgevingen. 8 Renderen: Het berekenen en visualiseren van computer afbeeldingen. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 15

16 2 FLASH PLAYER 9 & ACTIONSCRIPT 3 Voor dit onderzoeksproject werd specifiek gekozen voor Flash, meerbepaald Flash player 9, in combinatie met Actionscript 3. Als IDE 9 werd gekozen voor Flash CS FLASH CS3 Adobe Flash CS3 is de laatste versie van de Flash IDE en de enige versie die de ontwikkeling met Actionscript 3 en Flash player 9 ondersteunt. De Flash authoring tool is een IDE waarin men vanuit een grafische user interface (GUI) Flash applicaties kan bouwen (figuur 1). Figuur 1: Schermafdruk van de Flash IDE 9 IDE (integrated Development Environment): Programma waarin een bepaald programmeeromgeving in gebruikt kan worden. Vaak is een IDE voorzien van een grafische designer, een code editor en een compiler. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 16

17 2.2 ACTIONSCRIPT 3 Flash Actionscript werd oorspronkelijk in het leven geroepen als ondersteuning van het visuele Flash concept en is door de jaren heen uitgegroeid tot een volwaardige scripttaal. De meeste recente versie, Actionscript 3, wordt uitgevoerd op de nieuwe Actionscript Virtual Machine 10 2 (AVM) die gebouwd werd op de nieuwste Flash Player, versie 9. Deze laatste versie van Actionscript is, net als javascript, gebaseerd op ECMAScript en is bijgevolg volledig object georiënteerd. Actionscript 3 biedt verschillende verbeteringen ten op zichte van Actionscript 2 maar er zijn toch beperkingen ten op zichte van klassieke programmeeromgevingen. De belangrijkste karakteristieken van Actionscript 3 worden in tabel 2 besproken. Run- en compiletime foutmeldingen In tegenstelling tot zijn voorganger, Actionscript 2, ondersteunt Actionscript 3 runtime foutmeldingen. Deze foutmeldingen zijn vergelijkbaar met soortgelijke scripttalen en bieden een vangnet voor verschillende typen foutmeldingen. Runtime types De Flash player onderzoekt in runtime het type van een object waardoor type safety 11 verbeterd wordt. Deze types worden gebruikt om variabelen te representeren op de computer zelf waardoor het geheugenverbruik drastisch gereduceerd wordt. Regulaire expressies en bit operatoren 12 Actionscript 3 ondersteunt regulaire expressies volgens de ECMA standaarden alsook het gebruik van bitoperatoren. Namespaces Abstracte container constructie die als wrapper rond bepaalde klassen wordt gebruikt om zo dubbelzinnige namen in de broncode te vermijden. Multiple inheritance Een Actionscript 3 klasse kan zowel overerven van een superklasse als van een interface. Een interface kan niet beschouwd worden als een volwaardige klasse maar als een klassenstructuur. Performance Verbeterde performance door een overervingsysteem dat gebaseerd is op klassen in plaats van prototypes. Packages en namespaces Ondersteunt packages en namespaces. Compiler Compileert tegen een volledig nieuw type bytecode. Event handling Actionscript 3 is volledig Event driven gebaseerd op het DOM event model. Integratie van E4X Actionscript 3 ondersteunt de ECMA E4X xml standaarden voor het verwerken van xml data. 10 Virtual machine: Software dat een hardwareomgeving nabootst. In het geval van Actionscript draait een gecompileerd programma in een virtuele omgeving en dus niet op de machine zelf. 11 Type safe: Een type safe programmeertaal biedt datatypes aan die van een specifiek voorgedefinieerd type zijn en dus niet generisch geïmplementeerd zijn. 12 Bitoperatoren: Operatoren waarmee niet de data maar het aantal bits achter de data wordt gemanipuleerd. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 17

18 Toegang tot de Flash runtime omgeving Actionscript 3 ondersteunt direct toegang tot de Flash runtime omgeving (bibliotheek) en de display list. Methode overloading ECMAscript 3 ondersteunt geen methode overloading waardoor je enkel de default constructor of methodes met dezelfde functionaliteit maar andere benamingen moet gebruiken. Er is wel de mogelijkheid om optionele parameters mee te geven hoewel dit drastische beperkingen heeft ten opzichte van het overloaden van een methode. Generics ECMAscript 3 ondersteunt geen generics 13. Dit kan wel omzeild worden door runtime type checking toe te passen. Abstracte klassen ECMAcript 3 ondersteunt geen abstracte klassen 14. Actionscript 3 voorziet dit door interfaces aan te bieden waardoor multiple inheritance wordt nagebootst. In realiteit zijn interfaces niets meer dan voorgedefinieerde klassenstructuren. Het vreemde in deze context is dat verschillende base klassen van Actionscript 3 wel abstract zijn. Het ontbreken van deze structuur is enkel te wijten aan het feit dat Adobe Actionscript 3 de ECMA standaarden volgt. Array De array in Actionscript 3 is niet type safe maar gaat uit van de top-level klasse: het object. Unsafe code Actionscript 3 ondersteunt geen unsafe code 15. Garbage Collection De standaard garbage collection 16 is vaak traag en moet handmatig geforceerd worden. Tabel 2 : Language karakteristieken van Actionscript3 (Grossman,Huang 2006). Shockwave Flash (.SWF) is een gedeeltelijk open bestandformaat voor interactieve multimediatoepassing gebaseerd op vectoren, afbeeldingen, audio en video. Een swf bestand is klein genoeg om een applicatie serverside en via de webbrowser aan te bieden maar heeft ook de mogelijkheid om zwaardere applicaties lokaal te draaien. Flash authoring tool bestanden (.FLA) zijn bestanden die het bronmateriaal van de Flash applicaties bijhouden. Actionscript klassen (.as of.actionscript) zijn platte source bestanden die gekoppeld kunnen worden aan een FLA via embedded code of via de documentklasse. Embedded code 17 is Actionscript broncode die achter een object op de tijdlijn wordt geplaatst en dus rechtstreeks in het Flash designer bestand zit. De documentklasse kan gebruikt worden om een extern Actionscript bestand te koppelen aan de timeline of stage van een FLA. De Flash 9 compiler compileert Actionscript code vanuit de FLA documentklasse naar bytecode in de vorm van SWF. Deze SWF kan worden afgespeeld in de Actionscript Virtual Machine 2 (AVM). Actionscript kan dus niet direct gecompileerd worden maar moet gekoppeld worden aan een Flash designer bestand. Deze Flash 9 compiler is niet dezelfde compiler als de Flex 18 Actionscript compiler (figuur 2). 13 Generics: Stijl van programmeren volgens het type-to-be-specified-later principe. Hierdoor kan de klasse aangepast worden afhankelijk van het nodige datatype. 14 Abstracte klasse: Een klasse die één of meer voorgedefinieerde methoden bevat maar die niet geinitialiseerd kan worden, enkel overgeërfd kan worden. 15 Unsafe code: Broncode die de geheugentoekenning zelf beheert. 16 Garbage Collection: Automatische geheugenbeheer. 17 Embedded code: Broncode die rechtstreeks in een flash object staat. 18 Flex: Een framework gericht op de ontwikkeling van RIA (rich internet application). Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 18

19 Figuur 2: Schematische voorstelling van de werking van de Flash compiler. Actionscript klassen worden aan een flash designer object gekoppeld en zo via de flash IDE gecompileerd tot een uitvoerbaar shockwave object. 2.3 HIËRARCHIE Allereerst bekijken we de hiërarchie van de standaard ingebouwde klassen (figuur 3). Deze hiërarchie is erg belangrijk omdat ze ons in staat stelt om generische broncode te schrijven. Object EventDispatcher DisplayObject InteractiveObject DisplayObjectContainer Sprite MovieClip Top level extends Object extends EventDispatcher extends DisplayObject extends InteractiveObject extends DisplayObjectContainer extends Sprite Figuur 3: Hiërarchie van de standaard ingebouwde display klasse. De tob level klasse is het object. Dit object is de superklasse van alle andere klassen in Actionscript 3. In Actionscript 3 is de object klasse de top-level klasse. Dit wil zeggen dat alle andere klassen deze klasse overerven. De tweede klasse in deze hiërarchie is de EventDispatcher. Actionscript 3 is een scripttaal die volledige gebaseerd is op events en er vanuit gaat dat elk Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 19

20 object in staat is zelf een event te dispatchen (Loose Coupling) 19 (Weick,1983) wanneer hij iets aan de buitenwereld wil laten weten. Wanneer een klasse zelf niet in staat is om een event te dispatchen is deze klasse afhankelijk van andere klassen om dit in zijn plaats te doen. Dit laatste gaat in tegen de grondregels van geoptimaliseerd OOP. In figuur 4 is deze onderlinge verhouding schematisch voorgesteld. We gaan er vanuit dat klasse 1 een instantie van klasse 2 aanmaakt die op zijn beurt een instantie van klasse 3 aanmaakt. Klasse 1 kan via de eigenschappen en de publieke methode klasse 2 aanspreken. Klasse 2 kan op zijn beurt klasse 3 via dit model aanspreken. Wanneer klasse 2 iets wil laten weten aan klasse 1 (die hoger in de hiërarchie zit) kan hij een event dispatchen. Klasse 1 kan dan beslissen om naar deze event te luisteren. Hetzelfde geldt voor klasse 3. Deze klasse kan een event dispatchen waar zowel klasse 2 maar ook klasse 3 naar kan luisteren. Dit noemt met Event Bubbling (W3C,2000). Figuur 4: Schematische voorstelling van het OOP model. Dit model toont aan hoe de onderlinge hiërarchie in het OOP model werkt. Wanneer een bovenliggend klasse een onderliggend klasse wil aanspreken kan dit via de methoden en eigenschappen van die klasse. Een onderliggende klasse die de bovenliggende klasse wil aanspreken moet gebruik maken van het DOM event model. Wanneer we zelf klassen willen definiëren of structuren willen bouwen (engine/processor) dienen we rekening te houden met deze hiërarchie. Een nieuwe klasse zonder superklasse zal automatisch de object klasse als superklasse hebben. Deze klasse is dan niet type-safe en is niet in staat het DOM Event model te volgen en bijgevolg niet conform met de OOP regels. 19 Loose Coupling: Stijl van programmeren waarbij componenten zo veel mogelijk onafhankelijk zijn van elkaar. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 20

21 3 2D ISOMETRIC MAP SCROLLING TILE BASED GAME ENGINE Specifiek voor deze opdracht willen wij gebruik maken van een tile-based game engine die in isometrisch perspectief tekent en map scrolling ondersteunt. Na een grondige analyse van bestaande engines in de open source community hebben we vastgesteld dat er geen bestaande engines zijn die van toepassing zijn voor ons project. Hierdoor is het idee en het initiatief ontstaan om zelf een 2D tile engine te schrijven die zowel map scrolling als isometrie ondersteunt. 3.1 TWEEDIMENSIONAAL (2D) Figuur 5: Tweedimensionale vorm Met de term 2D of tweedimensionaal doelt men op een object dat slechts 2 meetkundige dimensies heeft, namelijk een lengte en een breedte (figuur 5). Tweedimensionaal kan ook als synoniem voor plat of vlak worden beschouwd daar er nooit een fysische diepte kan zijn. De vorm van een dergelijk object is onbelangrijk voor de tweedimensionaliteit en is onbeperkt in grootte of structuur. Uitgesproken voorbeelden van tweedimensionaliteit zijn een vierkant, een cirkel en een driehoek. Toch kan dieptezicht aanwezig zijn door een driedimensionaal zicht te suggereren. Dit noemt men isometrische projectie. Isometrische projectie is een vorm van grafische projectie, meer bepaald een vorm van axonometrische projectie. Het is een manier om ruimtelijke figuren in een plat vlak weer te geven. Bij deze methode lijkt het of je schuin van boven en 45 van de zijkant tegen het te projecteren object aan kijkt. Er wordt hierbij geen gebruik gemaakt van perspectief, wat betekent dat lijnen die in de ruimte parallel lopen, op de projectie ook parallel zullen lopen. Bij een Isometrische projectie is de hoek tussen de drie geprojecteerde assen altijd 120 (figuur 6). Dit heeft tot gevolg dat steeds het vooraanzicht, het zijaanzicht en het bovenaanzicht zichtbaar zijn, en dat er relatief weinig vervorming optreedt. (Wikipedia, 2007) Figuur 6: Voorstelling van een axonometrische projectie waarbij alle hoeken tussen de geprojecteerde assen 120 zijn. Als we dit vertalen naar de praktijk kunnen we vaststellen dat een spel gebaseerd op 2 meetkundige dimensies kan bestaan uit volgende mogelijkheden: Flat 2D Een bovenzicht waarbij alle fysieke eigenschappen in een vlakke stijl worden getekend. Isometrische zicht Een 3D suggestie door middel van een meetkunde projectie. Side Scroller Het spel wordt in zijaanzicht getekend. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 21

22 Wanneer we de wiskundige definities rond isometrie beschouwen, kunnen we vaststellen dat deze bijzonder ingewikkeld zijn en nooit gebruikt worden in de context van game ontwikkeling. Wiskundige isometrie gaat niet altijd uit van tweedimensionaliteit en gaat ook de projecties in 3D definiëren. In game ontwikkeling hebben we die diepteberekeningen niet nodig daar wij ervoor kiezen om in 2D te werken. Dit wil zeggen dat we enkel de suggestie van diepte wensen te tekenen en niet de diepte zelf. Wanneer we een tilemap in isometrisch perspectief willen tekenen kunnen we uitgaan van een plat tweedimensionaal dambord patroon. Dit dambord patroon vormt de basis van alle berekeningen. We kunnen dus simpelweg alle berekeningen, bewegingen en andere manipulaties uitvoeren op dit platte patroon en achteraf de coördinaten omzetten naar een isometrische suggestie. Omzetten van een vierkant naar een isometrische projectie Allereerst draaien we het vierkant met precies 45 zodat het vierkant op een hoek staat. Vervolgens verminderen we de hoogte met de helft (figuur 7). Op deze manier krijg je een perfecte isometrische tegel. Afbeeldingen kunnen vanzelfsprekend niet zonder meer van een tweedimensionale projectie naar een isometrische projectie getransformeerd worden. Figuur 7: Transpositie van tweedimensionale projectie naar een isometrische projectie. Isometrische formules Wanneer we in het dambordpatroon een x- en y-waarde berekenen, weten we dat de x-as horizontaal loopt en de y-as verticaal. Wanneer deze waarden worden getransformeerd naar een isometrische projectie gaan deze assen van plaats veranderen (figuur 8). Maar deze verandering vindt enkel plaats in de projectie, niet in de berekening. We kunnen gewoon de standaard x- en y-waarden gebruiken en deze vervolgens door formules laten omrekenen (tabel 3). xiso = x y yiso = (x + y)/2 Tabel 3: Standaard isometrische formules. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 22

23 Figuur 8: Theoretische isometrische transitie. Door de gestandaardiseerde isometrische formules toe te passen op lineaire tweedimensionale x- en y-waarden verplaatsen de assen zich naar een isometrische projectie. 3.2 MAP SCROLLING In een 2D computerspel zijn er twee manieren om beweging te suggereren. De eerste veelgebruikte techniek is de speler zelf lineair doorheen de map te laten bewegen (figuur 9). De speler kan dus, binnen de viewport 20, vrij bewegen. Dit houdt in dat het zicht van de speler beperkt is tot datgene wat binnen de viewport zichtbaar is, totdat de viewport wordt hertekend. De map moet enkel hertekend worden wanneer de speler buiten de viewport beweegt waardoor de gemiddelde framerate 21 stijgt omdat enkel de speler in realtime hertekend moet worden. Wanneer de speler echter buiten de map beweegt, moet de map, die zichtbaar is in de viewport, volledig hertekend worden. Dit is op tragere platforms moeilijk tot onmogelijk waardoor laadtijden, die als buffer fungeren, moeten worden ingecalculeerd. Figuur 9: Schematische voorstelling van lineaire beweging. De blauwe pijl duidt een mogelijke beweging aan van de speler. De speler kan dus vrij bewegen in alle richtingen binnen het zichtbare scherm. 20 Viewport: Tweedimensionale rechthoek waarin het spel wordt geprojecteerd, ook wel het venster in het spel genoemd. 21 Framerate: De maat van frequentie waarmee een grafische renderer unieke beelden produceert. Dit wordt vaak uitgedrukt in frames/seconde. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 23

24 Bij de tweede veel gebruikte techniek om beweging te simuleren gebeurt net het omgekeerde. We centraliseren de positie van de speler en bewegen de map onder de speler door. De speler lijkt dus te bewegen door de verschuiving van de map. Dit systeem laat toe enkel de tegels die buiten de viewport vallen, door de verschuiving van de map, te verwijderen en een reeks tegels bij te tekenen in de richting van de beweging. De speler die op de map staat, gaat in dit systeem mee bewegen met de map en moet dus in tegengestelde beweging worden verplaatst. Hierdoor lijkt het of de speler beweegt en in realiteit beweegt de speler ook op de map. Door de map te verschuiven in de tegengestelde richting van de beweging gaat de speler centraal blijven staan ten op zichte van de viewport.(figuur 10) Figuur 10: Schematische voorstelling van lineaire beweging door middel van mapbeweging. De groene pijlen duiden de gecentraliseerde positie van de speler aan. Wanneer de speler naar rechts beweegt wordt de viewport geüpdate in dezelfde richting als de speler. De map zelf beweegt echter in de tegenovergestelde richting. Hierdoor wordt de illusie van beweging gecreëerd. 3.3 TILE BASED Het principe van tilebased engines is ontstaan in een tijd dat er minder RAM geheugen aanwezig was voor de grafische rendering. Het grote probleem was dat de grafische rendering performance te beperkt was om graphics van de wereld alsook de figuren die in deze wereld rondlopen snel en op een vlotte manier op het scherm te tonen. Een tile map bood hier een alternatief aan, aangezien ze in plaats van een volledige wereld in één tekening te stoppen gebruik maakt van verschillende kleinere tiles die samen één geheel vormen. Dit biedt de mogelijk om grote en ingewikkelde werelden met relatief weinig geheugen te tekenen. Een tilemap wordt typisch opgebouwd door gebruik te maken van een matrix (of in de programmeerwereld een 2 dimensionale array). Via een graphic loader wordt elk waarde van elk coördinaat verbonden met een texture 22 waarin de tile-afbeelding geladen wordt. Deze 22 Texture: Term voor een computerafbeelding. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 24

25 waarde kan gekoppeld worden aan bepaalde informatie zoals: terreintype, bewegingsmogelijkheden, snelheid,... Deze matrix kan aangemaakt worden in een eenvoudige teksteditor maar vaak is het beter om gebruik te maken van een map editor waardoor het gebruik van de mapgrootte en de grafische eigenschappen worden geoptimaliseerd. Tiles kunnen verschillende meetkundige vormen aannemen. Enkele veel gebruikte voorbeelden hiervan zijn een vierkant, een hexagoon en een cirkel.(tabel 4) Voorbeeld Matrix: [1,1,1,1] Grafische Rendering [1,0,0,1] [1,0,0,1] [1,1,1,1] Waarden: 1 : Muur, niet bewandelbaar 0: Bewandelbaar Tabel 4: Matrix vs Tilemap. 3.4 GAME (COMPUTERSPEL) Een computerspel is een spel dat ontworpen en gespeeld wordt op een computer. De term computer kan in deze context vrij ruim worden geïnterpreteerd daar alles wat een processor, geheugen en een grafische ondersteuning heeft gebruikt kan worden om computerspelen op te draaien. Denk bijvoorbeeld aan de GSM, de PDA, consoles en dergelijke. De Engelse term voor een computerspel, namelijk game, wordt ook steeds vaker gebruikt en werd onlangs omgenomen in woordenboek van Van Dale. Een game is een computerprogramma dat in zeker zin vergelijkbaar is met bordspelen. Een game heeft meestal één of meerdere doel(en) en biedt de gebruiker middelen aan om deze doelen te bereiken. Er bestaan ook games die geen specifiek doel hebben. Een voorbeeld hiervan is het omstreden Second Life, maar deze zijn eerder uitzondering dan regel. Deze doelen kunnen enorm verschillend zijn en hangen vaak af van het type game. Een game en de gameplay worden geprogrammeerd op een engine. 3.5 ENGINE De engine is de motor van het spel. Hierin worden de mogelijkheden van het spel betreffende beweging, tekenen... bepaald. De gameplay van het spel wordt in zeer grote mate beschreven door de opbouw van de engine. We onderscheiden 4 typen engines, namelijk Game Engine, Tile Engine, Physics Engine en Particle Engine. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 25

26 4 FLASH GAME ENGINE De architectuur van de engine bestaat uit vier grote packages en de resources. Deze componenten hebben elk een specifieke functie in de architectuur en zijn elk van even groot belang voor de correcte werking van de engine (figuur 11). CORE Collections Components Data IO Math Objects Physics Rendering Sound GLOBAL GAME Collections Data Gameplay Games IO Objects UI Components Menu RESOURCES Figuur 11: Schematische voorstelling van de architectuur van de engine. De engine en het spel bestaat ui 4 belangrijke packages die elke een specifiek functie hebben. De resources is een verzameling van alle data noodzakelijk voor het functioneren van het spel en de engine. 4.1 CORE Het eerste package van de architectuur is de Core package. De klassen in dit package zijn een verzameling van voorgedefinieerde klassen en collections die de basis vormen van de engine. Deze klassen, die beschouwd kunnen worden als een collection framework 23, zijn zodanig geschreven dat ze een generische herbruikbaarheid aanbieden. De klassen binnen dit package worden onderverdeeld in negen subpackages COLLECTIONS Het package collections bestaat uit vier verschillende soorten collections die rechtstreeks door base objecten gebruikt kunnen worden maar ook als superklasse kunnen fungeren. De collection klasse is een niet- type safe base collection klasse die als container fungeert voor displayobjecten of als superklasse kan dienen. Zoals aangehaald is een displayobject de superklasse van alle visuele containers, zoals onder andere de sprite en de movieclip. 23 Framework: Geheel van klassen en componenten die het ontwikkelen van applicaties eenvoudiger maakt en versnelt. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 26

27 Bijgevolg biedt de klasse in zijn methoden en eigenschappen steeds een displayobject als terugkeerwaarde aan. Dit wil zeggen dat de gebruiker zelf deze terugkeerwaarde moet typecasten 24. De objectcollection klasse is exact dezelfde als voorgaande klasse met uitzondering van de terugkeerwaarde. De objectcollection klasse keert in zijn methoden en eigenschappen steeds de top-level klasse, het object, terug. De reden waarom gekozen werd om 2 verschillende klassen te implementeren die ogenschijnlijk dezelfde functionaliteit aanbieden, is dat er een onderscheid gemaakt kan worden tussen de standaardmethoden, het gebruik van het object en het displayobject. Actionscript 3 ondersteunt jammer genoeg standaard geen generics. Dit zorgt voor type safety problemen die zelfs tot inconsistent geheugengebruik kunnen leiden. Een mogelijke oplossing hiervoor is het controleren van het type van het object dat aan de collectie toegevoegd wordt (runtime typechecking 25 ). Deze methode verzekert een typesafe omgeving. In de klasse kan een required type eigenschap aangemaakt worden die gebruikt wordt om het type object dat toegevoegd wordt aan de collectie te controleren (figuur 12). Figuur 12: De constructor van de GenericCollection klasse. In de constructor wordt een required type meegestuurd. Dit type vormt de basis van de runtime type check. Bij het toevoegen van een nieuw object wordt gecontroleerd of het type van het object dat toegevoegd wordt, overeenkomt met het requiredtype dat bij de initialisering aan de constructor werd meegegeven (figuur 13). Als dit niet zo is, wordt een type fout verstuurd. De eigenschappen en methoden van deze klassen zijn beschreven voor alle objecten die afgeleidt zijn van de toplevelklasse, het object. Figuur 13: Runtime type checking in de GenericCollection klasse. Voor een object toegevoegd wordt aan de collectie controleert de functie eerst het type van het object. De genericdisplaycollection tenslotte, heeft dezelfde functionaliteit als de vorig genoemde klasse met uitzondering van het basistype. Het basistype van deze klasse is het displayobject. 24 Typecasten: Operatie waarbij het een datatype expliciet wordt omgezet naar een ander datatype. 25 Typechecking Het controleren van het datatype, dit zowel in runtime als in compiletime. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 27

28 4.1.2 COMPONENTS Het components package bevat één klasse, de button klasse, die generisch gedefinieerd is. Deze klasse biedt een button in de vorm van een movieclip aan. Adobe heeft standaard een button object in het Actionscript framework geïmplementeerd maar deze heeft beperkingen ten opzichte van de movieclip. Deze button klasse moet gekoppeld worden aan een displayobject uit de bibliotheek. Het voordeel van het gebruik van een movieclip in vergelijking met de standaard button, is dat een movieclip runtime rendering ondersteunt waardoor programmaticaal de button hertekend kan worden DATA Het data package bevat alle core klassen die gebruik maken van een vorm van IO 26. De PHP klasse is een extensie van de Flash.net.NetConnection klasse waarin extra eigenschappen en gestandaardiseerde methoden worden geïmplementeerd. Dit laat de engine toe de brug naar de mysql databank via een veralgemeende default gateway te maken IO De loadmap klasse is een extensie van de Flash.net.URLLoader klasse die het laden van externe bestanden ondersteunt. Deze klasse laadt een gestructureerd.map bestand. Dit map bestand moet een tweedimensionale structuur hebben waarbij elke waarde gescheiden wordt van de andere waarden door middel van een, en afgesloten moet worden met de letter x (tabel 5). 1,2,3,4,5 6,7,8,9,10x Tabel 5: Structuur van een map bestand. Na het laden keert deze klasse een tweedimensionale array terug die de map voorstelt. Het doorlopen van dit map bestand gebeurt op basis van substrings. De klasse gaat het bestand regel per regel overlopen en zoekt naar, en spaties. Het is bijgevolg belangrijk dat deze bestanden steeds correct gestructureerd zijn. De texturelist klasse is een extensie van de Flash.net.URLLoader klasse die een.textures bestand uitleest en dit in een collectie plaatst. Dit.textures bestand is een plat tekstbestand met een opsomming van alles textures die in de map textures te vinden zijn. Ook de namen van de textures worden zonder extensie opgesomd en van elkaar gescheiden met een, (tabel 6). Texture1,texture2,texture2 Tabel 6: Structuur van een texturelist bestand. 26 IO (input/output) : Verzamelnaam voor alle structuren met betrekking tot communicatie tussen processen. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 28

29 De LoadTexture klasse is een extensie van de Flash.display.movieClip klasse. De klasse maakt in de constructor een nieuw texturelist object aan waarmee de lijst van de te laden textures wordt opgehaald. Vervolgens worden alle textures die in de lijsten worden gedefinieerd geladen en in een array geplaatst. Deze array wordt later gebruikt om de klasse BitmapCache te initialiseren. De loadxml klasse is de basisklasse voor XML (volgens E4X standaarden) en kan enkel gebruikt worden als superklasse MATH Het math package bevat de klasse count, isoalgorithm, position, stringsearch en random, die wiskundige of logische problemen oplossen. De count klasse telt het aantal items op de map van één specifiek type. Het krijgt als parameters de map en een Worldobject mee. De map moet in de vorm van een array gedefinieerd zijn en het Worldobject in de vorm van een string. De isoalgorithm klasse zet een lineair punt om in een isometrisch punt en omgekeerd volgens de gestandaardiseerde formules (tabel 7). x iso = (x y) y iso = (x + y) /2 Tabel 7: Isometrische formules waarbij geen rekening wordt gehouden met de grootte van een tile. De position klasse doorzoekt de map naar een specifieke waarde. De map moet in de vorm van een array gedefinieerd zijn en de waarde in de vorm van een string. De terugkeerwaarde van deze functie is het punt waar de waarde het laatst werd gevonden. Dit wil zeggen dat de functie slechts één enkele waarde terugkeert. De random klasse berekent op basis van de map een willekeurige positie. Intern wordt ook gecontroleerd of de positie door de speler bewandelbaar is. De stringsearch klasse ontleedt één element van de map array in verschillende onderdelen (tabel 8). 1. Collision detection De eerste waarde van de string stelt een numerieke waarde tussen 0 en 9 voor die gebruikt wordt voor diepteberekeningen en collision detection. De waarde 0 is gereserveerd voor bewandelbare tiles. De waarde 1 is gereserveerd voor niet-bewandelbare tiles. De waarden 2 tot 9 zijn voorzien maar niet gereserveerd. 2. Worldobject De twee volgende waarden van de string stellen het interactieve object voor. De waarden van 0 tot en met 9 zijn gereserveerd voor de speler De waarden van 10 tot en met 99 zijn gereserveerd voor worldobjects. 3. Texture De laatste 4 waarden zijn gereserveerd voor de texture van de tiles. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 29

30 // 0 = de tegel is bewandelbaar // 10 = Standaard Worldobject is het Worldobject met texture 10 // 1000 = Standaard texture is 1000.extensie Tabel 8: Voorbeeld van de werking van de stringsearch klasse De maxtrixwaarde wordt opgedeeld in 3 afzonderlijk waarden OBJECTS De objectklasse is een verzameling van voorgedefinieerde superklassen die gestandaardiseerd zijn voor de collecties. Er is bewust niet gekozen om interfaces van deze klassen te maken daar ze weinig nut hebben door de afwezigheid van abstractie. De baseobject klasse is een extensie van de Flash.display.Sprite klasse en beschrijft standaard methoden en eigenschappen die gebruikt worden in zowel de rendering als de collecties. De entity klasse is de superklasse van alle objecten die in de engine en het spel voorkomen. Deze klasse is een extensie van de Flash.display.MovieClip klasse. De geïmplementeerde methoden en eigenschappen mogen niet overschreven worden maar moeten altijd vanuit de superklasse worden opgeroepen. De NPC klasse is de superklasse van alle bewegende objecten in het spel. Deze klasse is een extensie van de eerder genoemde entity klasse en kan bijgevolg gewoon opgenomen worden in de gestandaardiseerde architectuur PHYSICS De depthmanager is de basisklasse die standaard diepteberekeningen uitvoert. Deze klasse dient voor meer uitgebreide functionaliteiten als superklasse beschouwd te worden. De depthklasse is een, in Actionscript 3 geïntegreerd, model voor geavanceerde diepteberekeningen en is gebaseerd op bubble sorting en de leeway afwijking RENDERING Het rendering package bevat klassen die specifiek geschreven werden om het grafische render proces te optimaliseren en te versnellen. De alphamanager kan op basis van een waarde, in de vorm van een 32-bits integer, een alpha kanaal toevoegen aan de kleur eigenschap van een object. Door het reference model van Actionscript 3 is geen terugkeerwaarde noodzakelijk. De drawing klasse (figuur 14) implementeert vier synchrone call functies die beheerd worden door het DOM model van Actionscript 3. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 30

31 Figuur 14: De drawing klasse. Deze klasse implementeert 4 synchrone. Om deze klasse te gebruiken is het noodzakelijk een nieuwe klasse aan te maken die de drawing klasse als superklasse heeft. Vervolgens kan je tot vier call functies overschrijven naar eigen wens (figuur 15). Wanneer je de call functies wil oproepen dien je dit steeds te doen vanuit de superklasse zelf. Dit systeem zorgt voor een efficiënt beheer van de draw calls en biedt ondersteuning voor asynchrone werking. Figuur 15: Implementatie van een klasse op basis van de drawing klasse. Deze klasse overschrijft 1 call en tekent vervolgens een object door de _draw methode van de super klasse op te roepen. Het renderen van het spel wordt in principe door de Flash player zelf afgehandeld. De render klasse gaat dan ook alle standaard methoden die betrekking hebben op het renderen van het spel centraliseren om zo een snel en efficiënt beheer van de stage 27 te kunnen aanbieden. 27 Stage: De stage is het displayobject met de hoogste hiërarchie. Hierop worden alle andere displayobjecten op geplaatst. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 31

32 Zowel de resolution klasse als de viewport klasse zijn eigenlijk voorgedefinieerde klassen. De engine verwacht deze klassen precies in deze structuur. Beiden klassen dienen dan ook via het OOP model gebruikt te worden SOUND Alhoewel Flash 9 standaard een audio- en videospeler aanbiedt kwamen de specificaties helaas niet overeen met de vooropgestelde vereisten. De sound klasse is gebaseerd op de ingebouwde functionaliteiten maar ondersteunt zowel synchroon als asynchroon geluid. Dit is zeer belangrijk aangezien het afspelen van een FX geluid afhankelijk moet zijn van de snelheid van de interactie en niet van de snelheid van de geluidsverwerking. 4.2 GLOBAL Het Global package biedt verschillende statische klassen aan die beschikbaar dienen te zijn voor alle game klassen. Het bevat vooral klassen die opsommingen, gestandaardiseerde waarden of typebeperkingen bevatten. De BitmapCache is een statische collectie van alle textures die via de loadmap klasse werden opgehaald. Vooraleer deze klasse gebruikt kan worden dient ze eerst geïnitialiseerd te worden. Vervolgens kan de klasse doorheen de hele engine gebuikt worden als statische container (Figuur 16). Figuur 16: Voorbeeld van de werking van de statische BitmapCache klasse. Deze klasseis een statische verzameling van textures. De itemcache klasse is een statische collectie gebaseerd op de core objectcollection klasse. Bij initialisatie gaat deze klasse een weak-typed array converteren tot een collectie van textures. De andere klassen die in dit package zitten zijn elk een verzameling van statische constante stringwaarden die alle mogelijke types voorstellen van een bepaald object (figuur 17). Een korte opsomming van de andere klassen in dit package: 1. Item types 2. Missiontypes 3. NPCtypes 4. Texttypes 5. States Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 32

33 6. Sounds 7. Type Figuur 17: Voorbeeld van een statische klasse: de ItemType klasse. 4.3 UI (USER INTERFACE) Om de interactie tussen de gebruiker en de engine zo optimaal mogelijk te laten verlopen wordt er gebruikt gemaakt van een User Interface (UI). Dit package bevat een reeks componenten die gebruikt worden in de UI van het spel MENU Figuur 18: Schermafdruk van het menu. Het intromenu (figuur 18), dat door de collega s van het Departement Beeldende Kunst (opleiding grafische kunst) werd gebouwd, is een movieclip uit de Flash bibliotheek die verbonden is met deze klasse. Via dit hoofdmenu, dat bij de start van het spel wordt getoond, kan een gebruiker een nieuw spel starten, een bestaand spel verder zetten, de credits bekijken of de algemene voorwaarden raadplegen. De klasse die met de movieclip verbonden is biedt enkele eigenschappen aan, volgens de OOP principes, die het hoofdmenu moet delen met de engine. Verder implementeert deze klasse een PHP data connectie waarmee de gegevens van de gebruiker worden opgehaald of weg geschreven. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 33

34 Het selectiemenu (figuur 19) is een onderdeel van het hoofdmenu. Deze klasse is verbonden met een MovieClip uit de Flash bibliotheek en wordt gebruikt om een karakter te kiezen waarmee vervolgens het spel gespeeld wordt. Deze klasse implementeert standaard enkel het DOM Event model. De visuele kant van dit menu is volledig opgemaakt in de Flash designer op basis van de Flash tijdlijn. Nadat een keuze wordt gemaakt gaat de klasse, die aan de movieclip hangt, een event dispatchen waardoor het hoofdmenu weet dat er een figuur is gekozen. Figuur 19: Schermafdruk van het selectiemenu. Het frame (figuur 20) is een movieclip die alle user interface objecten die in het spel gebruikt worden verzamelt in één object. Dit object bestaat dus uit verschillende componenten die elk hun eigen movieclip object hebben met de daarbij horende klasse. De volgende onderdelen zijn terug te vinden op het frame: Score Ingame display Healthbar Message interface Ingame menu Mp3 speler Inventory Figuur 20: Schermafdruk van het frame De klasse die aan dit frame gelinkt is kan beschouwd worden als een centrale manager voor alle componenten die op dit frame staan. Verder is dit frame volledig afhankelijk van de gegevens van de gebruiker. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 34

35 4.3.2 COMPONENTS De display, die een onderdeel is van het eerder vernoemde frame, reageert op het ingame menu. Wanneer de display wordt getoond, wordt het spel in een pauze status gezet en kan de gebruiker interacteren met het menu. De klasse die aan deze movieclip hangt is een extensie van de Flash.display.MovieClip klasse. De energybar movieclip en klasse hebben als doel de huidige energie waarde van de speler grafisch voor te stellen. Deze energiemeter kent als bovengrens 100 en als ondergrens 0. Wanneer de energie waarde van de speler minder dan 0 is verliest hij een leven. De klasse achter deze movieclip berekent de visuele representatie van de energie waarde. Deze klasse wordt niet rechtstreeks gebruikt maar is geïmplementeerd in het frame van waaruit de energie wordt bepaald door de gegevens van de gebruiker. De mp3 (figuur 21)speler is een volledig onafhankelijke audiospeler die geïntegreerd is in het frame. De mp3 speler is volledig gebaseerd op xml waarden van waaruit kanalen en muziek kunnen worden toegevoegd. De sound backbone van deze speler is gebaseerd op de sound klasse uit de core namespace. Ook deze klasse wordt niet rechtstreeks door het spel gebruikt maar is Figuur 21: Schermafdruk van de mp3 speler. geïmplementeerd in het frame van waaruit deze beheerd wordt. De equalizer klasse is een onderdeel van bovenstaande mp3 speler en biedt een visuele representatie aan van het geluidskanaal. De klasse berekent een geluidsspectrum (figuur 22) van het gekozen geluid in de vorm van een bytearray. Vervolgens wordt een ingeladen texture vervormd aan de hand van dit spectrum.. Figuur 22: Spectrum functie. Deze functie visualiseert een geluidsbestand. Alle objecten die de speler in het spel opraapt worden automatisch door de engine behandeld. Wanneer aan specifieke voorwaarden voldaan is komen bepaalde worldobjects in de inventory terecht. De inventory (figuur 23) is een verzameling van objecten die de speler kan bewaren en waarmee interactie kan bestaan. De inventory klasse is, zoals alle andere componenten, gekoppeld aan een movieclip waarmee een visuele representatie van de inventory getoond wordt in het frame. Deze klasse wordt niet rechtstreeks gebruikt maar wordt volledige automatisch door de engine gestuurd en met gegevens van de gebruiker gevuld. De elementaire werking van deze klasse kan met onderstaande afbeelding schematisch worden voorgesteld. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 35

36 Initialisatie Visuele initialisatie Bouwen van de inventory Add item/ remove item Figuur 23: Schematische voorstelling van de werking van de inventory. 1. De itemarray wordt geïnitialiseerd op basis van de gegevens van de gebruiker. 2. Er wordt berekend hoeveel items effectief aan de movieclip moeten worden toegevoegd. 3. De visuele representatie wordt gebouwd. 4. Na de volledige initialisatie en bouw van de inventory kan de engine items toevoegen en verwijderen. Verder implementeert deze klasse ook methoden die gebruikt worden voor de visuele kant van de inventory ;zoals onder andere scrollen, sorteeralgoritmes, Om de interactie tussen de gebruiker en het spel optimaal te laten verlopen is er gekozen om een klasse te definiëren, het messageframe (figuur 24), die de standaard NPC interactie ondersteunt. Dit betekent concreet dat er een movieclip is aangemaakt die de mogelijkheid beidt om de mogelijke NPC opties grafisch voor te stellen. De klasse biedt de mogelijkheid om 3 knoppen te definiëren die een bepaalde actie veroorzaken en om een tekstveld te definiëren waarin informatie, die gebruikt kan worden om de speler te informeren, kan geplaatst worden. Figuur 24: Schermafdruk van het messageframe. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 36

37 4.4 GAME Het game package is een verzameling van klassen die gebaseerd zijn op de core maar specifiek geschreven zijn voor dit spel. Dit houdt in dat deze klassen niet generisch zijn en enkel in deze context bruikbaar zijn. Ze kunnen over het algemeen beschouwd worden als hulpklassen voor het uiteindelijke spel COLLECTIONS De tileset is een type-safe collectie die specifiek geschreven is voor het benaderen en verzamelen van tile objecten. De engine verwacht dit tile object als terugkeerwaarde en gaat nooit casten op een terugkeerwaarde. Deze klasse is een extensie van de base.core.collections.collection klasse maar voorziet nieuwe methode in plaats van de bestaande super methoden te overschrijven. De reden hiervoor is dat deze methoden meer parameters vereisen dan de standaard super methode (figuur 25). Figuur 25: AddTile methode van de tileset klasse DATA Omdat de engine volledig aanstuurbaar moet zijn vanuit externe data is gekozen voor een php /mysql driven backbone voor het gebruikersbeheer. Dit laat toe om de gebruiker de mogelijkheid te bieden om het spel op te slaan. De phpcon klasse is een extensie van de base.core.data.php en implementeert methoden en eigenschappen, volgens het OOP principe, die betrekking hebben op de gebruiker. Deze klasse is niet generisch en de methodes zijn voorzien voor een specifieke databank. Dit systeem werkt met de AMFPhp engine die als brug fungeert tussen php/mysql en Actionscript 3 (figuur 26). Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 37

38 MySql databank PHP 5 Serverside script AMF Php Brug Actionscript AMF Php gateway Engine Php klassen Figuur 26: Schematische voorstelling van de datastructuur van de engine. De php klassen maken via een default gateway een verbinding met de AMFPHP engine die op zijn beurt de verbinding met de mysql databank tot stand brengt via ingebouwd php klassen. Er werd gekozen om met de AMF(Action Message Format) php engine te werken daar deze de php verbinding met Actionscript centraal beheert. Voor kleine en middelgrote applicaties kan php best rechstreeks geïmplementeerd worden maar voor grotere projecten is een extern centraal beheer sneller en beter GAMEPLAY Collision detection(cd) is de Engelse term voor het detecteren van intersectie tussen 2 objecten (figuur 27). Dit betekent dat de engine via het CD systeem controleert of de coördinaten van een specifiek object overeenkomen met de coördinaten van een ander object. Object A Object B Figuur 27: Intersectie tussen 2 objecten. Doorheen de jaren zijn er veel verschillende soorten CD ontstaan die elke hun eigen vaak ingewikkelde algoritmes hebben. In deze context, tile based isometrie, kunnen we de Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 38

39 eenvoudigste manier van CD toepassen. In ons model (figuur 28), en dit geldt trouwens voor de hele engine, gaan we uit van een matrix. De map wordt dus bepaald door een.map bestand in de vorm van een matrix. De waarden in deze matrix hebben een bepaald structuur en worden door de engine ontleed. In die structuur is ook een waarde voorzien waarmee we bepalen of een tegel wel of niet bewandelbaar is door de speler. In ons geval is gekozen voor de waarde 1 als de tile niet bewandelbaar is en de waarde 0 als de tile wel bewandelbaar is. Figuur 28: Schematische voorstelling van het collision detection model. In dit geval kan de speler enkel naar boven, naar links of naar onder bewegen. Zoals vermeld dienen alle objecten die in de engine voorkomen af te stammen van de base.core.objecte.entity klasse. Deze klasse implementeert de volgende 4 eigenschappen (figuur 29) betreffende CD: Figuur 29: Eigenschappen van de entity klasse. In deze eigenschappen worden de matrixwaarden van de aanliggende tiles bijgehouden. Deze eigenschappen worden gebruikt om de matrixwaarde van de omringende tiles bij te houden. Vooraleer de speler een bepaalde beweging kan doen gaat de CD processor na of de speler wel naar die specifieke richting mag bewegen. Dit gebeurt door te controleren of de tegel langs de speler in de richting waarin de speler wil bewegen wel bewandelbaar is. Dit systeem is niet bijzonder accuraat maar is in een tweedimensionaal context erg snel en flexibel. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 39

40 Diepte is een absolute vereiste wanneer we in een tweedimensionaal isometrisch perspectief werken. Alle tiles moeten een afzonderlijke dieptewaarde krijgen omdat deze tiles volgens deze dieptehiërarchie getekend worden. In dit systeem geldt: hoe hoger de diepte, hoe hoger de zichtbaarheid van de tegel. De suggestie van diepte creëren is een relatief eenvoudig proces (figuur 30). Door voldoende diepte buffers in te bouwen tussen de verschillende tiles kunnen we bewegende objecten dynamisch van diepte laten wisselen afhankelijk van de diepte van de omliggende tiles. Figuur 30: Schematische voorstelling van de diepteverwerking bij een beweging naar rechts. Zelfs indien er binnen de tiles zelf bewogen wordt of indien het bewegend object groter is dan de tile zal er nooit een probleem zijn. Adobe implementeerde in eerdere versies van Actionscript een standaard depth systeem. Dit systeem was niet type-safe en kon bij slecht gebruik enorme geheugenlekken veroorzaken. Dit oude diepte systeem liet toe oneindig aantal bufferplaatsen te reserveren in de displaylist van de stage zonder hierin objecten te plaatsen. Concreet betekent dit dat je in Actionscript 2 een oneindig aantal layers dynamisch kan aanmaken en deze een willekeurige index kan geven. Helaas is deze eigenschap in Actionscript 3 niet doorgevoerd en is de structuur van de displaylist (figuur 31) helemaal herzien. In Actionscript 3 wordt de stage beschouwd als een soort array. Dit wil zeggen dat er geen lege plaatsen kunnen zijn en dat de indices elkaar moeten opvolgen Movieclip Movieclip Movieclip Movieclip Movieclip Figuur 31: Schematisch voorstelling van de displaylist. De displaylist kan enkel displayobjecten bevatten en de indices dienen opeenvolgend te zijn. Voor de diepteberekening van de engine betekent dit dat er geen buffer ingebouwd kan worden en alle indices netjes op elkaar aansluiten.(figuur 32) Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 40

41 Figuur 32: Aansluitende diepte indices in een tile based omgeving. Deze situatie zorgt ervoor dat het oorspronkelijk idee niet meer toegepast kan worden. Door de opeenvolging van de indices kan de diepte van de bewegende onderdelen nooit exact bepaald worden en zal er steeds een overlap bestaan. Hiervoor zijn 2 mogelijk oplossingen bedacht: Buffer bitmaps Allereerst werd er gedacht aan een systeem dat lege bitmaps toevoegt aan indices die gereserveerd moeten worden. Dit systeem is vrij eenvoudig te implementeren maar zorgt voor een sterk performanceverlies daar lege bitmaps door Flash ook gerendered worden Sorteer algoritmes Er bestaan verschillende sorteeralgoritmes die alle tiles aflopen en herindexeren. Dit betekent in de praktijk dat alle zichtbare tiles overlopen moeten worden en opnieuw in runtime hertekend moeten worden. Dit is een haalbaar systeem als de resolutie kleiner is dan 400x300.(figuur 33) Figuur 33: Bubble Sort algoritme in Actionscript 3. Omdat geen van de vorige systemen efficiënt genoeg werkt is er dan beslist om een perfect werkend dieptesysteem voorlopig uit te stellen en een benadering ervan te gebruiken. De depth klasse is een extensie van de base.core.physics.depthmanager en implementeert methoden die zowel de diepte van bewegende objecten berekent als de diepte van tiles die bijgetekend worden. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 41

42 De doelstelling van het prototype van het spel is het de bedoeling objecten te verzamelen die verspreid liggen op de map. De gebruiker kan zo de campus van de PHL virtueel ontdekken. Deze objecten kunnen zowel worldobjects zijn die opgeraapt en gebruikt kunnen worden alsook NPC s die interactief informatie geven aan de gebruiker. De engine implementeert een systeem waarbij missies dynamisch verwerkt worden. Dit wil zeggen dat de engine de missies laadt uit een.xml bestand, de missies dynamisch tekent en de gevolgen van de missies dynamisch verwerkt. De mission klasse speelt hierin een belangrijke rol. Deze klasse laadt bij initialisatie één specifieke missie op basis van naam. Vervolgens gaat de klasse de structuur van de missie en de objectieven die hieraan vast hangen volgens het OOP principe delen. De missionobjective klasse is een onderdeel van het missiesysteem en bestaat voornamelijk uit eigenschappen die de verwerking van de missies verbeteren. Deze klasse representeert één objectief uit één missie IO (INPUT/OUTPUT Het IO package bevat klassen die betrekking hebben op de invoer en uitvoer van data specifiek voor dit spel. Ze zijn niet generisch en zijn enkel bruikbaar in deze context. Er bestaan verschillende klassen in dit package die allen van de base.core.data.xml klasse afstammen en elk een specifieke taak hebben. Ze kunnen beschouwd worden als hulpklassen voor het laden en initialiseren van andere objecten. LoadInventory Deze klasse verzorgt het laden van de inventory items op basis van de gegevens van de gebruiker. Ze wordt rechtstreeks geïmplementeerd in de inventory klasse. LoadItem Deze klasse laadt een xml met alle item omschrijvingen die de engine ondersteunt. Elke keer als een Worldobject wordt getekend of door speler wordt opgeraapt wordt deze collectie geraadpleegd om de omschrijving van de gevolgen van de actie op te halen. LoadMission Deze klasse laadt een missie aan de hand van de bestandsnaam. Ook hier wordt de klasse rechtstreeks in de mission klasse gebruikt. LoadNpc De loadnpc klasse laadt de standaard NPC s. LoadSounds De loadsounds klasse laadt alle geluidsbestanden via een stream 28 model. De loadmanager verzamelt verschillende klassen die elk een bepaald bestandstype laden in 1 gecentraliseerde klasse. Het voordeel van dit systeem is dat extra laders achteraf naadloos bijgevoegd kunnen worden. De Preloader verwerkt deze dan ook automatisch. 28 Streaming is een techniek waarbij bewegende beelden of geluidsfragmenten in kleinere delen worden opgesplitst. De delen worden afzonderlijk gedownload. (buffer) Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 42

43 4.4.5 OBJECTS Dit package bevat alle objecten die door het spel worden gebruikt. Over het algemeen spreken we hier over extensies van de base.core.objects.entity klasse. Deze klassen zijn verder uitgewerkt voor één specifiek doel. Ze hebben elke specifieke methoden en eigenschappen bovenop de gestandaardiseerde methoden en eigenschappen gedefinieerd in de super klasse. Interaction NPC Character WorldObject Tile(figuur 34) Box Item Figuur 34: SchermAfdruk van de tile klasse. Deze klasse heeft een reeks eigenschappen die specifiek voor dit object van toepassing zijn. Om het overzicht van het spel te bewaren en de gebruiker de mogelijkheid te geven objecten te situeren is er een minimap (figuur 35) voorzien. Dit systeem werd aanvankelijk in het frame opgenomen en dus ook in realtime getekend. Na uitvoerig testen (grafiek 1) bleek dat dit systeem teveel performance problemen gaf en is er besloten om de minimap achter een sneltoets aan te bieden. Dit laatste laat toe de minimap telkens wanneer ze opgeroepen wordt opnieuw te herinitialiseren en dus ook te hertekenen. De engine kan dan in een pauze status gezet worden waardoor we nooit 2 mappen op het zelfde moment moeten hertekenen. De minimap klasse maakt geen gebruik van de engine voor het tekenen van de map. Ze voorziet zelf een draw call die de map tekent op basis van de viewport. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 43

44 Minimap Geen Minimap Grafiek 1: Frames per second bij de aanwezigheid en afwezigheid van een realtime minimap. De minimap kent standaard slechts 3 verschillende types tiles: Groen: Alle tiles die bewandelbaar zijn door de speler zijn groen gekleurd. Grijs: Alle tiles die niet bewandelbaar zijn door de speler zijn grijs gekleurd. Blauw: Alle tiles die water bevatten of buiten de matrix liggen zijn blauw gekleurd. De speler wordt op de minimap voorgesteld als een rode bol met een bewegende cirkel rond. Hierdoor kan de gebruiker zichzelf onmiddellijk situeren in het spel. Alle objecten die op de map liggen wordt voorgesteld door een zwarte lichtbol. Figuur 35: Schermafdruk van de minimap. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 44

45 De user klasse is één van de meest cruciale klassen van de engine. Deze klasse voorziet een hele reeks eigenschappen en methoden die slecht 1 doel hebben: de gegevens van de gebruiker tijdens het spel bij houden en deze op de juiste plaats injecteren in de engine. Het spel, alsook de engine, haalt dus alle data uit deze user klasse. Hierdoor is het van groot belang dat deze user klasse bij elke verandering de engine op de hoogte stelt van deze verandering. Dit gebeurt door middel van een event. Elke keer een eigenschap van de user klasse verandert gaat de user klasse een event dispatchen die door de engine opgevangen kan worden. Omdat de user klasse bijzonder veel eigenschappen heeft om alle data bij te houden is het bijzonder veel werk om bij de update van elke eigenschap een event te dispatchen. Een oplossing hiervoor werd gevonden in een andere Actionscript bibliotheek, namelijk het Flex framework. Dit framework biedt de objectproxy (figuur 36) klasse aan. Deze klasse gaat alle eigenschappen in het oog houden en bij elke verandering een event doorsturen. Dit gecentraliseerd beheer van events zorgt voor een enorme verbetering van de performance. Figuur 36: Een objectproxy in de user klasse. Deze klasse beheert alle eigenschappen van de user klasse. Wanneer ze een verandering detecteert in de eigenschappen van de user klasse dispatcht ze een event. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 45

46 5 PHL ADVENTURE GAME Het spel zelf is gedefinieerd in 2 klassen: de preload klasse en de game klasse. De preload klasse is verantwoordelijk voor het correct aanleveren van data waarmee de game klasse de engine gebruikt. 5.1 PRELOAD Voordat het spel wordt gestart moet eerst de juiste data gepreload worden en naar de engine gestuurd worden. Deze data is afhankelijk van de gegevens van de gebruiker. Allereerst wordt het menu geïnitialiseerd en getoond op het scherm. Dit menu is een grafische representatie van de gegevens van de gebruiker. De gebruiker kan in dit menu een nieuw spel starten of een bestaand spel verder zetten. Wanneer een nieuw spel gestart wordt leidt het menu de gebruiker door verschillende schermen om zo de initiële gebruikersgegevens te bepalen. De gebruiker kan onder andere een naam, een wachtwoord, persoonlijke gegevens en een karakter kiezen waarmee het spel wordt gespeeld. Als het nieuw spel wordt aangemaakt legt de engine standaard waarden vast betreffende gameplay. Het aantal afgewerkte missies wordt op 0 gezet, de standaard startscore wordt aan de gebruiker toegewezen, het aantal health en levens wordt bepaald. Deze gegevens worden vervolgens in de database opgeslaan en op de server wordt een map aangemaakt met data die specifiek voor deze gebruiker is vastgelegd. Als de gebruiker kiest om een bestaand spel verder te zetten dient hij zijn gebruikersnaam en wachtwoord in te geven. Deze gegevens worden door de engine gebruikt om de juiste data uit de database te halen en de correcte mappengroep op de server aan te spreken.(figuur 37) Gebruiker User interface Spel Mysql databank Engine Map Figuur 37: Schematische voorstelling van de preload klasse. De gebruiker bepaalt de data via de user interface van het spel waarmee de engine werkt. Nadat het menu de juiste gegevens van de gebruiker heeft gedefinieerd wordt een event gedispatcht naar de preload klasse. Deze laatste weet nu dat de menu klasse klaar is en kan via het OOP model de nodige data uit de menu klasse halen. Op basis van deze data start de Preloader met het 2 de proces. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 46

47 Vervolgens initialiseert de Preloader een object van de de loadmanager klasse. De loadmanager klasse is een verzameling van laders die elke een specifieke taak hebben. Elke lader staat in voor één specifiek resource type. De loadmanager klasse gaat deze laders dan ook sturen met behulp van de gegevens van de gebruiker. Load Manager Laad texures Laad gebruikersgegevens Laad inventory Laad map Figuur 38: Hiërarchische voorstelling van de loadmanager klasse. De loadmanager verzamelt alle laders in één gecentraliseerde klasse. Allereerst laadt de loadmanager alle textures met behulp van de loadtextures klasse. Zowel de textures van de tiles, van de worldobjects als van de NPC s worden door deze klasse geladen. Deze bevinden zich elk in een aparte map met elk een eigen texturelist. Tijdens het laden stuurt de loadmanager constant data naar de preload klasse. Deze laatste weet dus hoe ver de loadmanager precies zit met laden en kan dit dan ook grafisch voorstellen door middel van de preload balk. Als laatste stap in dit proces initialiseert de loadmanager de statische BitmapCache klasse met de geladen textures. Wanneer de textures volledig geladen zijn en de global klassen geïnitialiseerd zijn dispatcht de loadtextures klasse een event dat alles succesvol verlopen is. Hierdoor weet de loadmanager dat hij de volgende lader kan aanspreken: de user klasse. De user klasse is één van de meest essentiële klassen in de engine. Ze voedt de engine met data die noodzakelijk is voor een correcte werking van het spel. Deze klasse bevat dus eigenschappen en methoden die de engine kan aanspreken. De user klasse kent geen hulpklasse voor het laden van data maar gaat zichzelf met data vullen bij initialisatie. Ook de user klasse laat via een event de loadmanager weten dat de user klasse klaar is voor gebruik. Als laatste stap haalt de loadmanager de map op via de loadmap klasse. De map is gebaseerd op een.map bestand in de vorm van een matrix die gespecificeerd is per gebruiker. Wanneer de gebruiker een nieuw spel start zal dit een standaard.map bestand zijn. Als de gebruiker al een spel heeft opgeslaan is dit een.map bestand gedefinieerd in de map van de gebruiker die op de server staat. Als deze laatste stap succesvol is wordt de loadmanager opnieuw gewaarschuwd door middel van een event. Nadat de loadmanager deze laatste event ontvangt dispatcht de loadmanager zelf een event die de preload klasse vertelt dat alle laders succesvol overlopen zijn. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 47

48 5.2 SPEL Het spel zelf, dat terug te vinden is in de klasse game.as, is een Actionscript 3 bestand met een duizendtal regels dat gebruik maakt van alle eerder opgesomde structuren en zo een spel vormt. Ik ga trachten voornamelijk in theorie de werking van het geheel algemeen te verklaren DECLARATIE EN INITIALISATIE Het is van vrij groot belang dat datatypes op de juiste manier worden gedeclareerd. Zo is er een enorm verschil in geheugenverbruik tussen een floating point en 32 bits integer of tussen een object en een string. Actionscript 3 ondersteunt vrijwel alle standaard datatypes. Naast deze primitieve objecten dienen we ook objecten aan te maken die door de engine gebruikt worden. Onderstaande afbeelding toont een reeks objecten die in het spel worden gedeclareerd. Figuur 39: Declaraties uit de game klasse. Globale declaratie is natuurlijk iets wat ten alle koste vermijden moet worden aangezien ze aanzienlijk meer geheugen verbruiken daar ze nooit door de garbage collector worden opgeruimd. De enige manier om een globaal gedeclareerde variabele toch te verwijderen is ze gelijk te stellen aan null en alle referenties naar dit object te verwijderen. Helaas zijn globale objecten noodzakelijk omdat sommige objecten nu eenmaal over het hele spel beschikbaar moeten zijn. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 48

49 Anderzijds is het gebruik van een locale declaratie in een loop 29 ook alles behalve geheugenbesparend. Een mogelijk oplossing hiervoor is het declareren van een globaal object zonder deze te initialiseren. Hierdoor kunnen we dit object in een locale functie initialiseren, gebruiken en vervolgens weer disposen. Dit systeem zorgt ervoor dat hetzelfde object herbruikt kan worden waardoor een aanzienlijke hoeveelheid geheugen wordt bespaard.(figuur 40) Door consequent gebruik van doordachte declaratiemethoden is het mogelijk enorm veel geheugen te sparen en de applicatie optimaal te houden. Figuur 40: Verschil in declaraties. Als de game.as klasse wordt opgestart maakt de default constructor een preload.as object aan in het spel zelf. Nadat de preload klasse alle data heeft geladen wordt dit object verwijderd en wordt de functie startgame() opgeroepen. Deze functie gaat alle nodige objecten en event listeners initialiseren. Allereerst moet de stage geïnitialiseerd worden zodat deze correct werkt met de engine. Zo wordt de framerate van de stage op de gewenste hoeveelheid geklokt. De standaard voor webgames in de game industrie verwacht minstens 35 frames per seconde op alle systeem voor een correcte en vlotte gameplay. Door de berekeningen van de engine, het renderen van grafische objecten en andere factoren verliezen we vanzelfsprekend aanzienlijk wat frames per seconde. Om dit te compenseren wordt de FPS geklokt op 45. Dit geeft ons een buffer van 10 frames per seconde. Zoals vermeld heeft de engine specifieke data nodig van de gebruiker. Deze data werd eerder in de preload klasse geladen en kan volgens het OOP principe opgehaald worden. Enkele voorbeelden van data is de map array en de gebruikergegevens. Naast de engine en de stage zelf moeten ook de verschillende objecten die globaal gedeclareerd werden geïnitialiseerd worden. 29 Loop: Een repetitie in een programmeertaal waardoor een of meer statements een aantal keren uitgevoerd worden. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 49

50 In de eerste initialisatie methode, init(), worden de volgende structurele initialisatie uitgevoerd: Character Het character stelt de gebruiker voor. Dit object kan door de gebruiker worden aangestuurd. Resolutie In deze eerste initialisatie wordt ook de resolutie ingesteld. In deze context wordt een resolutie van 640 x 480 gebruikt waarbij 640 de breedte van het tekenveld is en 480 de hoogte. User De eigenschappen van de user klasse worden geüpdate. Sound De sound klasse wordt geïnitialiseerd. In de tweede initialisatie methode, initialiselisteners(), worden alle globale event listeners toegevoegd (figuur 41). Figuur 41: Initialisatie van de event listeners. Deze listeners zijn essentieel voor de engine omdat deze alle data uit deze event listeners haalt. De derde initialisatie, initializenpc(), gaat alle NPC uit een xml laden en deze in een array plaatsen die in de engine geïntegreerd is. De engine kan deze array lezen en verwerkt alle NPC s die zich in de array bevinden. De laatste initialisatie, initializeui(), verzorgt de User interface. De functie gaat het frame en alle componenten die betrekking op de user interface klaarmaken voor gebruik. Ook dit gebeurt op basis van de gegevens van de gebruiker DRAW CALL Nadat alle objecten geïnitialiseerd zijn, kunnen we de eerste draw call uitvoeren. Deze functie gaat de map tekenen vooraleer het spel begint. Als eerste stap gaat deze methode de positie van de speler bepalen. Dit is essentieel aangezien de speler steeds gecentraliseerd wordt (figuur 42). Het is dus nodig te weten op welke tegel de speler staat zodat de afwijking ten op zichte van de viewport berekend kan worden. In de volgende stap dienen we de x- en y- waarden van de viewport in te stellen. Aangezien de engine de map tekent en later ook hertekent op basis van de viewport is het belangrijk dat deze berekeningen correct zijn. De vier viewport punten kunnen we exact berekenen met behulp van standaard formules (tabel 9). Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 50

51 viewport.start.x = char.matrix.x -(resolution.x/this.tilesize)/2 viewport.start.y = char.matrix.y -(resolution.y/this.tilesize)/2 viewport.end.x = char.matrix.x +(resolution.x/this.tilesize)/2 viewport.end.y = char.matrix.y + (resolution.y/this.tilesize)/2 Tabel 9: Formules die de viewport berekenen. Figuur 42: Schematische voorstelling van de viewport. Om de verschillende punten van de viewport te berekenen vertrekken we vanuit de tile (of matrixwaarde) van de speler, die steeds centraal staat. We kunnen bijvoorbeeld de linkse bovenhoek van de viewport (viewport.start.x) berekenen door de matrixwaarden van het character te nemen en hiervan het aantal tiles af te trekken ten op zichte van de resolutie (tabel 10). Vb. Het character staat op positie (20,10) in de matrix en de resolutie is 200 x 100 met een tilegrootte van 20. viewport.start.x = 20 (200/20)/2 viewport.start.x = 15 Tabel 10: Voorbeeld van een berekening van één viewport punt. Nu zijn de grootte van de viewport en de matrixwaarden van de tiles die binnen de viewport liggen bekend. In de volgende stap wordt de initiële offset, van het character ten op zichte van de viewport, berekend met behulp van formules (tabel 11). Offset.x = (TileSize*char.maxtrix.x)-(TileSize*char.matrix.y) Offset.y = ((TileSize*char.maxtrix.x)-(TileSize*char.matrix.y))/2 Tabel 11: Formules voor de berekening van de viewport offset. Vervolgens worden door middel van een dubbele for loop alle tiles getekend die in de viewport liggen. Hiervoor gebruiken we de eerder gedefinieerde viewport x- en y-waarden. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 51

52 In de loop wordt allereerst op elke coördinaat een tegel getekend. Het tekenen van een tegel wordt door een aparte functie behandeld (figuur 43). Deze functie maakt een nieuw tile object aan en berekent vervolgens s de tileoffset. Deze waarde bepaalt exact de x- en y-waarde, waarop de tegel getekend moet worden. Dit gebeurt met behulp van de eerder gedefinieerde offset waarde. De berekeningen zijn gebaseerd op de gestandaardiseerde isometrische formules die eerder besproken werden. Nadien controleert de functie of de tegelwaarden wel in de matrix liggen. In het geval dat deze tegel in de matrix ligt, haalt de functie alle nodige data uit de matrix met behulp van de eerder besproken stringsearch klasse. De tegel tekent de juiste texture op zichzelf en wordt toegevoegd aan de tileset. In de laatste stap wordt de tegel aan een container toegevoegd: de baselayer. In het geval dat de tegel niet in de matrix ligt wordt een standaard texture gebruikt en worden verder geen specifiek eigenschappen geset. Figuur 43: De createtile() functie. Deze functie tekent een nieuwe tile op basis van zowel de x- en y-waarden als de richting. Naast het tekenen van tiles, tekent de draw functie ook het character met behulp van de createcharacter() functie. Deze dient vanzelfsprekend in het centrum van het beeld getekend te worden. De x- en y-waarden zijn dus eenvoudig te berekenen op basis van de resolutie. Ook gaat de functie de npcarray controleren op de aanwezigheid van non playable characters (NPC). Indien er NPC s aanwezig zijn, worden deze getekend door middel van de createnpc() functie. Deze functie is gelijkaardig aan de createtile() functie en gaat ook voor elke NPC de tileoffset waarden berekenen. Alle andere eigenschappen die deze NPC s bezitten, zijn beschreven in het NPC object zelf en worden dus niet in de collectie opgenomen. Deze functie bepaalt met andere woorden enkel de x- en y-waarden van de NPC. Vervolgens worden de x- en y-waarden van de baselayer correct ingesteld en wordt de baselayer toegevoegd aan de displaylist van de stage. Als allerlaatste stap wordt de diepte van Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 52

53 het character ingesteld. De draw call (figuur 44) is nu volledig doorlopen en het spel is nu volledig geïnitialiseerd en klaar om te starten. Figuur 44: De draw call van PHL webgame. De draw functie tekent de initiële map voordat het spel begint INTERACTIE EN GAMEPLAY Het spel kent verschillende methoden die als enig doel hebben om de interactie van de gebruiker te verwerken en te visualiseren. Voor elke gebeurtenis of event moet een specifieke actie voorzien worden (figuur 45). Indien dit niet het geval is, zouden zowel de gebeurtenis als de actie zinloos zijn. In de praktijk betekent dit dat de engine reageert op events die door de gebruiker of door de gameplay worden veroorzaakt. Deze events dienen voornamelijk om data te updaten of om bepaalde acties uit te lokken. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 53

54 Figuur 45: Schematische voorstelling van het actiemodel van de engine. Gebeurtenis Aangezien de engine volledig event based is, moeten alle objecten die in games.as klasse aan bod komen zelf de engine laten weten wanneer er een gebeurtenis plaats vindt. Dit houdt concreet in dat alle objecten in staat moeten zijn een event te dispacten die op een of andere wijze in de game klasse terecht komen. Dit kan op verschillende manieren gebeuren. Een eerste manier is dat de game klasse zelf luistert naar objecten die in staat zijn om een event te dispatchen. De game klasse gaat dan niet alleen de events van die objecten kunnen ontvangen maar ook alle events die door objecten worden gedispatched die geïnitialiseerd zijn in het object waarop hij luistert (Event bubbling). Een voorbeeld van dit Event bubbling model is het aanklikken van een item in de inventory. Op het moment dat een speler klikt op een item verstuurt dit item zelf een event. Deze event wordt initieel herkend in de Inventory klasse waarvan dit item een visueel child is. De inventory bekijkt het eventobject en voert de nodige handler uit. Tegelijkertijd blijft deze event verder gaan aangezien de inventory een child klasse is van de user klasse. In deze user klasse wordt deze event ook opgevangen en wordt er gecontroleerd wat er met dit specifiek eventobject moet gebeuren. Een tweede manier om een gebeurtenis naar de engine te sturen, is het aanpassen van data die noodzakelijk zijn voor de engine. Een autonome klasse kan de data, die door de game klasse op datzelfde moment wordt gebruikt, aanpassen waardoor de game klasse met nieuwe data zal verder werken. Het is echter ook mogelijk dat een autonome klasse de eigenschappen van een andere klasse gaat aanpassen die door de game klasse gebruikt wordt. (Loose Coupling). Een voorbeeld hiervan is het aanpassen van externe resources zoals de databank, de textures, of het gebruik van een objectproxy. Behandeling Wanneer een gebeurtenis plaatsgevonden heeft, is het natuurlijk de bedoeling dat deze gebeurtenis wordt omgezet in een actie. Dit gebeurt in de vorm van event handling. Events worden dus via een event listener (5.2.1 Declaratie en initialisatie) verbonden met een handler die het eventobject opvangt en behandelt. In Actionscript 3 krijgt elke eventhandler als parameter het type event mee dat hij behandelt. Dit kan een generisch type zijn zoals het basetype, flash.events.event, maar dit kan ook een specifiek event zijn. Door het gebruik van specifieke events heeft de handler meer mogelijkheden doordat het eventobject een type heeft en bijgevolg beter beschreven is. Eén van de meest voor de hand liggende behandelingen is input. Wanneer de gebruiker via de muis of via het toetsenbord een bepaalde input veroorzaakt is het de bedoeling dat de engine deze herkent en hieraan een actie gaat koppelen. De muis input wordt door Flash standaard ondersteund. Elk displayobject in Actionscript is standaard voorzien van event listeners die naar de nodige events luisteren wanneer een muisactie plaatsvindt. Ook biedt Flash standaard Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 54

55 een keyboard klasse aan die kan communiceren met hardware en input kan detecteren. Enkel het afhandelen wordt standaard niet geïmplementeerd. Door een event listener op de stage te plaatsen die luistert naar keyboard input kunnen we de input detecteren en doorsturen naar een functie (figuur 46) die deze gaat omzetten naar een actie. Op basis van het KeyBoardEvent object kan de engine via de keycode controleren welke toets werd ingedrukt. Door deze te gaan filteren, koppelt de engine een specifieke actie aan elke toets. Figuur 46: Keyboard event handler. De handler vangt het event op en ontleedt het eventobject. Op basis van filtering kent de handler een specifieke actie toe. Een andere belangrijke vorm van behandeling is de reactie van de User Interface op de acties van de gebruiker. Wanneer de gebruiker bepaalde acties uitvoert tijdens het spel worden deze door de game klasse opgevangen en vertaald naar de User Interface. Deze context is een heel ander niveau van behandeling. Als de gebruiker bijvoorbeeld een Worldobject van het type health opraapt treedt een ingewikkeld proces in werking. Allereerst wordt het object herkend door de engine. De engine gaat de functie processitem() raadplegen om te controleren wat er precies met dit object moet gebeuren. Wanneer dit proces doorlopen is, worden twee acties gestart. De eerste actie is het verwijderen van het Worldobject en hertekenen van de tile. De tweede actie is een specifieke actie die verbonden is met het type van het Worldobject, in dit geval health. De engine weet nu dat hij de health van de gebruiker moet updaten en gaat de user klasse aanspreken. In de user klasse wordt de health eigenschap geupdate op basis van de waarden die gedefinieerd zijn in de eigenschappen van het item. Op het moment dat de health eigenschap in de user klasse wordt geupdate, treedt de objectproxy wrapper in de user klasse in werking. Deze herkent een update en dispatcht een event naar de game.as klasse. Deze klasse weet vervolgens, via het eventobject, dat een specifieke user eigenschap werd geupdate. Op dat moment beslist de engine, afhankelijk van het type eigenschap, dat de user Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 55

56 interface geupdate moet worden. Deze update wordt uitgevoerd en hiermee is het proces afgelopen. Acties Aangezien de engine in staat is events op te vangen (gebeurtenis) en deze ook te verwerken (behandeling) is het essentieel dat hieraan een logische actie wordt gekoppeld. In dit spel zitten een hele reeks acties die samen de gameplay van het spel bepalen. De belangrijkste acties van dit prototype worden dan ook besproken. Eén van de belangrijkste acties is beweging. Zoals vermeld bestaan er in 2D computerspellen twee gangbare manieren om beweging te simuleren, namelijk de speler bewegen of de map bewegen. In dit spel maken we gebruik van de 2 de manier. Als eerste stap moet de input van de gebruiker opgevangen worden. Dit gebeurt door middel van een event handler. De engine weet nu wanneer een specifieke toets ingedrukt wordt. Vervolgens stellen de vier variabelen de richting in. Deze worden opnieuw ingesteld elke keer een toets wordt ingedrukt maar ook elke keer een toets wordt losgelaten. Deze manier van werken zorgt voor een flexibelere beweging die wel lineair is maar enorm responsief. De beweging van de speler wordt elke FPS gecontroleerd door een functie movement(). Deze functie controleert of er een toets ingedrukt is en of de engine beweging toelaat. Als de engine bijvoorbeeld in een pauze state zit is beweging niet toegelaten. Indien beweging wel toegelaten is en een toets ingedrukt is die betrekking heeft op beweging roept deze functie de feitelijke beweging op: de move() functie. Deze functie verwacht als parameter een 32 bits integer waarmee de richting aangeduid wordt en een variabele van het type boolean waarmee de Dynamic Tile Swapping functionaliteit wordt toegepast. Allereerst vraagt de functie de collision detection klasse om de nodige berekeningen uit te voeren. De collision detection klasse stuurt de waarden van de tegels die rond het character liggen naar de eigenschappen van het character. De character klasse heeft ook een eigenschap, count, die gebruikt wordt om na te gaan op welke tegel het character zich precies bevindt. Mocht de snelheid van het character, die bepaald wordt door het aantal pixels per beweging, even groot zijn als de grootte van een tile zou deze eigenschap nutteloos zijn. Wanneer dit principe toegepast wordt zijn we zeker dat bij elke beweging het character van tegel verandert, in jargon ook wel tilejump genoemd. Wanneer de snelheid lager is dan de grootte van een tile moet een systeem gebruikt worden dat bijhoudt wanneer de speler van tile verandert. Dit gebeurt in de count eigenschap. Bij elke beweging wordt de count eigenschap verhoogd of verlaagd met de snelheid in pixels. Wanneer deze waarde groter is dan de grootte van een tile of kleiner is dan 0 dan beweegt het character naar een andere tile. Vervolgens gaat de methode nagaan of het character wel in de gevraagde richting kan bewegen. Als dit het geval is wordt de count eigenschap, de speler en de baselayer geüpdate afhankelijk van de richting. Wanneer deze beweging een tilejump veroorzaakt komt het Dynamic Tile Swapping mechanisme in werking. Het Dynamic Tile Swapping (DTS) (figuur 47) mechanisme is een zelf ontworpen mechanisme dat de map in realtime hertekent. Een tilejump wordt veroorzaakt door het character dat van tegel verandert. Als dit gebeurt wordt de baselayer in tegenovergestelde richting verplaatst en het character in de gevraagde richting verplaatst. Hierdoor wordt de illusie van beweging gecreëerd. Door deze manier van bewegen verdwijnt er aan één kant een rij of kolom tegels en moet er aan de tegenovergestelde richting een nieuwe rij of kolom tegels getekend worden (figuur 48). Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 56

57 Figuur 47: Schematische voorstelling van de werking van het DTS systeem. Dit systeem laat toe om enkel één rij of kolom tiles te verwijderen en één rij of kolom tiles bij te tekenen. Het DTS systeem verwijdert een rij of kolom tegels die in de tegenovergestelde richting van de beweging staan en tekent een rij of kolom tegels in de richting van de beweging. Ook dit gebeurt met de createtile() functie. Als laatste stap wordt de diepte van het character herberekend. Ook wordt de texture van het character aangepast aan de juiste richting. Figuur 48: Een onderdeel van de move() functie. Op basis van de richting berekent deze functie de verplaatsing van het object, de map en de viewport. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 57

58 Een tweede belangrijke actie in de game klasse is het verwerken van worldobjects. Deze worden op de map geplaatst door de tile zelf. De tile heeft een eigenschap oblink waarin de texture van de Worldobject wordt bijgehouden. Wanneer de engine de tile tekent wordt de Worldobject automatisch meegetekend. Dit betekent dat wanneer het character over een object loopt en dit impliciet opraapt, of wanneer de gameplay een Worldobject wil toevoegen aan de map, de oblink eigenschap van de tile veranderd moet worden. Als deze tile dan ook nog zichtbaar is, dient ze in realtime hertekend te worden. Als de tile niet binnen de viewport ligt, kunnen we de matrix gewoon aanpassen waardoor de engine geen verschil merkt. Het oprapen van objecten wordt behandeld door de processitem() klasse. Deze klasse controleert of het type van het opgeraapte item een object is dat hij herkent (figuur 49). Als hij het type herkent, start hij een specifieke actie die voorgedefinieerd is door het item zelf. Nadat deze actie uitgevoerd is wordt de oblink eigenschap leeg gemaakt en wordt de tile hertekend zonder Worldobject met behulp van de replacetile() methode. Figuur 49: De processitem() functie controleert het gevonden object en koppelt hieraan een actie. Het is ook mogelijk dat de gameplay worldobjects wil bij tekenen. In dit geval wordt gecontroleerd of de tile waarop dat Worldobject getekend moet worden binnen de viewport ligt. Indien dit het geval is dan update de gameplay de oblink eigenschap van de tile en gebruikt hij ook de replacetile() methode om de tegel opnieuw te tekenen. NPC s zijn objecten of karakters die niet door gebruikers kunnen worden aangestuurd. In deze engine bestaan er 2 soorten NPC s : De interactieve NPC en de gewone NPC. Beide NPC varianten zijn kinderen van de NPC base klasse en implementeren dezelfde structuren. Een NPC wordt gedefinieerd door middel van een xml bestand. Dit bestand bevat informatie over de NPC zoals: Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 58

59 Startpositie De positie waar de NPC spawnt 30. Eindpositie (sterfpunt) De positie waar de NPC wordt verwijderd en vernietigd. Path Een reeks coördinaten die de route bepalen die de NPC bewandelt. Tekst De informatie die de NPC aan de gebruiker geeft wanneer er interactie is. Opties De opties die de NPC aan de gebruiker kan geven wanneer er interactie is. Ook de actie die veroorzaakt wordt door deze opties worden hier gedefinieerd Een NPC is in staat om een bepaalde route te bewandelen. Dit wordt behandeld door de movenpc() functie die op dezelfde manier werkt als de move() functie die verantwoordelijk is voor de beweging van het character. Ook kan een gebruiker door middel van een trigger met de NPC communiceren. De NPC kan bijvoorbeeld de gebruiker bepaalde opdrachten geven of vitale informatie delen. Zoals reeds aangehaald, is op de engine een missie systeem gebouwd dat dynamische missies kan laden op basis van xml resources. Deze missies worden gebruikt om de speler doorheen de virtuele campus te leiden. Wanneer de speler een nieuw spel start, wordt de eerste missie geladen. Een missie kan enkel en alleen beginnen wanneer de gebruiker op de juiste manier met het spel communiceert. Een missie kan starten door middel van het oprapen van een Worldobject (impliciet) of door middel van een NPC (expliciet). Deze NPC gaat de gebruiker vragen of hij of zij de missie wilt starten. Indien de gebruiker hier op in gaat, wordt de missie gestart en wordt het eerste objectief op de map geplaatst. Elke missie heeft een willekeurig aantal objectieven die verzameld moeten worden door de gebruiker. Als alle objectieven verzameld zijn, is de missie geslaagd. Als eerste stap in dit proces wordt een Worldobject of NPC op de map geplaatst die verantwoordelijk is voor het starten van de missie. Dit wordt door de initializemission() functie behandeld. De functie gaat uit het user object het aantal gespeelde missies en objectieven ophalen. Op basis van deze 2 waarden gaat de functie het juiste objectief uit de juiste missie tekenen. Als dit eerste objectief wordt gehaald (startpunt), wordt de engine in een missie state geplaatst waardoor de engine gaat controleren of de gebruiker een objectief heeft verzameld. Deze controle wordt door de domission() functie uitgevoerd (figuur 50). Deze functie gaat elke frame per seconde na of het character zich op de coördinaten bevindt die overeenkomen met de coördinaten van het actieve objectief. Mocht dit objectief een Worldobject zijn, wordt dit gewoon door de standaardfunctie processitem() behandeld. 30 Spawnen: Verschijnen op de map. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 59

60 Figuur 50: Een deel van de domission() functie. Deze functie regelt welk missie met welk objectief aangemaakt moet worden. Doordat de engine in een missie state zit, gaat deze functie het opgeraapte Worldobject anders behandelen dan wanneer de engine in normale state zou zijn. Deze opgeraapte items worden toegevoegd aan een missie inventory die links bovenaan het scherm terug te vinden is. In het geval dat dit object een NPC is, wordt de interactie tussen de NPC, die de missie representeert, en de gebruiker vanuit het NPC object zelf behandeld. Elke keer als een nieuw objectief gevonden wordt door de gebruiker wordt het user object. Dit proces herhaalt zich tot alle objectieven van één specifieke missie gevonden zijn en de missie geslaagd is. 5.3 RESOURCES Eerder werd al besproken dat de engine gebruikt maakt van externe data. Deze externe data komt enerzijds uit de mysql databank en anderzijds uit de resource map die voor elke gebruiker is aangemaakt. De data die gecentraliseerd zijn in de databank zijn vooral data die van toepassing zijn op de gegevens van de gebruikers. Er werd gekozen om hiervoor geen xml bestanden te gebruiken maar specifiek een databank model. Dit laat toe om achteraf applicaties te voorzien die rechtstreeks op dit datamodel kunnen gebouwd worden. Gameplay elementen die afhankelijk zijn van de gebruiker worden echter in een persoonlijke map op de server opgeslaan. Door deze data per gebruiker te gaan personaliseren bestaat de mogelijkheid om gameplay elementen op te slaan. In de praktijk betekent dit dat een gebruiker een spel kan verder zetten of opslaan en dat netcode vrij eenvoudig te implementeren is. Naast de data die voorzien wordt in functie van de gebruiker, is er ook data aanwezig op de server die de engine zelf gaat voeden. In deze context spreken we vooral over textures, xml bestanden, muziekbestanden, Het grote voordeel van het consequent gebruik van externe data is dat het spel, en de engine daarachter, zowel op grafisch vlak als op het vlak van gameplay volledig herbruikbaar is. Het is perfect mogelijk om enkel door xml bestanden, map bestanden en textures aan te passen een volledig nieuw spel te bouwen zonder één regel code te schrijven. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 60

61 5.4 TOOLKIT De data die door de engine gebruikt worden moeten een specifieke structuur hebben. Omdat het een vrij ingewikkeld en tijdrovend proces is om testdata in het juiste formaat te krijgen is dan ook besloten om over te gaan tot de ontwikkeling van editors die dit proces aanzienlijk vereenvoudigen. Omdat de map enorm groot kan zijn en enorm veel verschillende tiles kan bevatten is het een bijna onmogelijke taak om een map aan te maken die genoeg variatie kent, groot genoeg is om de tekenprocessen te testen en esthetisch voldoet. Daarom werd beslist om een map editor (figuur 51) te maken. Deze map editor is gebaseerd op de technologie en architectuur van de engine en is volledig in flash geschreven. Ze biedt een intuïtieve interface waarmee in enkele minuten een map gebouwd kan worden. Ook de map editor is volledig gebaseerd op externe data. Zo moet een gebruiker enkel de textures map en het texturelist bestand updaten om een volledig nieuwe tileset te krijgen. Als de map opgeslaan wordt, zet de interne engine de visuele representatie om in een gestructureerd.map bestand. Dit.map bestand kan samen met de textures en texturelist rechtstreeks in de engine geladen worden. Figuur 51: Schermafdruk van de map editor. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 61

62 Ook het uitdenken van missies en deze gestructureerd in een xml plaatsen bleek een lastige maar vooral tijdrovende bezigheid. Om de structuur van de xml bestanden te garanderen werd dan ook besloten om een missie editor te maken op basis van het.net framework (figuur 52). Deze editor werkt met een zelfgeschreven xml parser 31 die geoptimaliseerd is voor de missie xml bestanden. Figuur 52: Schermafdruk van de mission editor. 5.5 ACTIVITEITEN Gedurende de afgelopen 7 maanden heb ik met 3 collega s gewerkt aan dit project. Een echte taakverdeling is er nooit gemaakt en er werd vaak samengewerkt onder het pair programming principe. In hoofdzaak heb ik mij vooral beziggehouden met de core, de architectuur van de engine en de elementaire tekenen- en render systemen. Voor een globale rapportering van mijn wekelijkse activiteiten gedurende de stage verwijs ik graag naar de stageverslagen in de bijlage. ( Bijlage 1 to 6) 31 Parser: Een component van een programma, dat de grammaticale structuur van een invoer volgens een vastgelegde grammatica analyseert en omzet. Steven Houben - Onderzoek naar en ontwikkeling van een 2D webgame: Phl Adventure 62

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous 2006-2007 Inhoudsopgave 1 2 1.1 Programmeertaal PHP5..................... 2 1.2 MySQL database......................... 3 1.3 Adobe Flash...........................

Nadere informatie

Zelftest Java concepten

Zelftest Java concepten Zelftest Java concepten Document: n0838test.fm 22/03/2012 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST JAVA CONCEPTEN Om de voorkennis nodig

Nadere informatie

HTML Graphics. Hans Roeyen V 3.0

HTML Graphics. Hans Roeyen V 3.0 HTML Graphics Hans Roeyen V 3.0 19 maart 2015 Inhoud 1. HTML5 Canvas... 3 1.1. Het Canvas element... 3 2. SVG Element... 9 2.1. SVG vergeleken met Canvas... 9 2.2. Een cirkel tekenen met SVG... 10 2.2.1.

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 1 Inhoud Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 2 Geluidsbronnen simulator, deel 2 Inleiding De weergave versnellen

Nadere informatie

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous 2006-2007 Voorwoord 1 Inhoudsopgave 2 Hoofdstuk 1 Inleiding 3 Hoofdstuk 2 icafe 2.1 Het idee 2.2 Mogelijkheden

Nadere informatie

Software Design Document

Software Design Document Software Design Document Mathieu Reymond, Arno Moonens December 2014 Inhoudsopgave 1 Versiegeschiedenis 2 2 Definities 3 3 Introductie 4 3.1 Doel en Scope............................. 4 4 Logica 5 4.1

Nadere informatie

Het SEESCOA project; jouw user interface, altijd en overal

Het SEESCOA project; jouw user interface, altijd en overal Het SEESCOA project; jouw user interface, altijd en overal Kris Luyten Karin coninx 17 januari 2002 Samenvatting De informatica kende een ware revolutie voordat men tot de desktop PC gekomen is. 20 jaar

Nadere informatie

Technisch Ontwerp W e b s i t e W O S I

Technisch Ontwerp W e b s i t e W O S I Technisch Ontwerp W e b s i t e W O S I WOSI Ruud Jungbacker en Michael de Vries - Technisch ontwerp Website Document historie Versie(s) Versie Datum Status Omschrijving / wijzigingen 0.1 20 nov 2008 Concept

Nadere informatie

Zelftest Programmeren in Java

Zelftest Programmeren in Java Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test

Nadere informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

HvA Instituut voor Interactieve Media ActionScript 3.0

HvA Instituut voor Interactieve Media ActionScript 3.0 PPRO 1: OEFENINGEN LES 1 Hierbij de werkgroepoefeningen behorend bij het practicum week 1. Lees de stukken uitleg aandachtig door, zonder deze informatie zullen de principes in de oefeningen moeilijk te

Nadere informatie

UBC op Microsoft Windows 64-bits

UBC op Microsoft Windows 64-bits UBC op Microsoft Windows 64-bits Inleiding Op de 64-bits varianten van Windows werkt de UBC (en vele andere pakketten) op een andere manier dan op de oudere 32-bits varianten van deze Windows versies.

Nadere informatie

Technologie en Interactie 3.2: software architectuur

Technologie en Interactie 3.2: software architectuur Technologie en Interactie 3.2: software architectuur Manual IAM-TDI-V2-Technologie en Interactie. Jaar 0809 blok 2 Oktober 2008 Fons van Kesteren 1/8 Inhoud Technologie en Interactie 3.2: software architectuur...

Nadere informatie

Nederlandse samenvatting (Dutch summary)

Nederlandse samenvatting (Dutch summary) Nederlandse samenvatting (Dutch summary) Ditproefschriftpresenteerteen raamwerk voorhetontwikkelenvanparallellestreaming applicaties voor heterogene architecturen met meerdere rekeneenheden op een chip.

Nadere informatie

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele Informatica Objectgeörienteerd leren programmeren Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode Objectgeörienteerd

Nadere informatie

HBO5 Informatica Netwerkbeheer (90 studiepunten) In deze module leer je projecten op te stellen en te programmeren in de VB.NET-omgeving.

HBO5 Informatica Netwerkbeheer (90 studiepunten) In deze module leer je projecten op te stellen en te programmeren in de VB.NET-omgeving. STUDIEFICHE CVO DE AVONDSCHOOL Opleiding HBO5 Informatica Netwerkbeheer (90 studiepunten) Module A5 Programmeren 1 (9 studiepunten) Plaats van de module in de opleiding: In deze module leer je projecten

Nadere informatie

App onderdelen. Source files. Android app onderdelen 1/6

App onderdelen. Source files. Android app onderdelen 1/6 Android app onderdelen 1/6 App onderdelen Een Android project bestaat uit een aantal onderdelen die hieronder beschreven worden. In het project venster kan je de mappen weergeven volgens de hieronder aangeduide

Nadere informatie

Ruimtelijke projectie. Cirkels tekenen. Aanwijzingen bij het gebruik van dit PDF-bestand.

Ruimtelijke projectie. Cirkels tekenen. Aanwijzingen bij het gebruik van dit PDF-bestand. Inhoudsopgave Ruimtelijke projectie Blz. 1 Blz. 2 Blz. 3 Blz. 4 Wiskundige manier Axonometrie Isometrie Cirkels tekenen Ronde vormen Aanwijzingen bij het gebruik van dit PDF-bestand. Dit bestand bevat

Nadere informatie

Kennis na het volgen van de training. Na het volgen van deze training bent u in staat:

Kennis na het volgen van de training. Na het volgen van deze training bent u in staat: Training Trainingscode Duur Gepubliceerd Taal Type Leermethode Kosten SF2015V8 4 dagen 02/02/2015 Nederlands & Engels Developer, basis Invidueel & klassikaal Op aanvraag Deze training richt zich op het

Nadere informatie

Onderzoeksvaardigheden 2

Onderzoeksvaardigheden 2 Performance van Phonegap Naam: Datum: april 2012 Studentnummer: 0235938 Opleiding: CMD Docenten: Pauline Krebbers Modulecode: MEDMO101DT Modulenaam: Onderzoeksvaardigheden 2 / Media & Onderzoek Inhoudsopgave

Nadere informatie

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces. Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de

Nadere informatie

Uitgebreid voorstel Masterproef Informatica. Titel van het project: Rolnummerherkenning van op een kraan

Uitgebreid voorstel Masterproef Informatica. Titel van het project: Rolnummerherkenning van op een kraan HoGent Uitgebreid voorstel Masterproef Informatica Titel van het project: Rolnummerherkenning van op een kraan Datum: 17/11/12 Naam student: Cédric Verstraeten Interne promotor: Tim De Pauw In samenwerking

Nadere informatie

IMP Uitwerking week 13

IMP Uitwerking week 13 IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het

Nadere informatie

ONTWERPEN VAN INTERACTIEVE PRODUCTEN

ONTWERPEN VAN INTERACTIEVE PRODUCTEN ONTWERPEN VAN INTERACTIEVE PRODUCTEN WORKSHOP INTERACTIEF PROTOTYPE BOUWEN F. van Slooten WORKSHOP INTERACTIEF PROTOTYPE BOUWEN Ontwerp Keuze tool/techniek Maken layout 2 dagen: dinsdag 23 september Ochtend:

Nadere informatie

Uitleg algemene structuur WTell

Uitleg algemene structuur WTell Uitleg algemene structuur WTell Brondocument C:\WebServer\Handleiding\WTellAlgemeen\WTellStructuurGlobaal.odt Versiebeheer Versie Datum Uitleg 1.0v 21-09-11 1e versie met uitleg globale structuur WTell

Nadere informatie

Een eerste applicatie

Een eerste applicatie Een eerste applicatie 2.1 Inleiding Programmeren in Visual Basic.NET doe je niet alleen door regels met code te schrijven. Je begint met het ontwerpen van een venster in de design mode met allerlei controls,

Nadere informatie

Bottleball Onderzoeksverslag MovingMonsters. Uitgevoerd door Arno Classens a.classens@student.fontys.nl

Bottleball Onderzoeksverslag MovingMonsters. Uitgevoerd door Arno Classens a.classens@student.fontys.nl Bottleball Onderzoeksverslag MovingMonsters Uitgevoerd door Arno Classens a.classens@student.fontys.nl 1 1. Inhoudsopgave Wat? Bladzijde 1. Introductie 3 2. Methodologie 4 3. Resultaten 3.1 Oriëntatie

Nadere informatie

01/05. Websites Nederland over. Mobile marketing. Whitepaper #03/2013. Mabelie Samuels internet marketeer

01/05. Websites Nederland over. Mobile marketing. Whitepaper #03/2013. Mabelie Samuels internet marketeer 01/05 Websites Nederland over Mobile marketing Mabelie Samuels internet marketeer 02/05 Mobile marketing Kunt u zich uw eerste mobiele telefoon nog herinneren? Die van mij was een Motorola, versie onbekend,

Nadere informatie

Introductie. Met Flowcode software ontwikkelt u snel en gemakkelijk de meest complexe elektronische en elektromechanische systemen.

Introductie. Met Flowcode software ontwikkelt u snel en gemakkelijk de meest complexe elektronische en elektromechanische systemen. Introductie Met software ontwikkelt u snel en gemakkelijk de meest complexe elektronische en elektromechanische systemen. is een van 's werelds meest geavanceerde ontwikkelomgevingen voor elektronica en

Nadere informatie

Uitgebreid eindwerkvoorstel Lokaliseren van personen en objecten met behulp van camera s

Uitgebreid eindwerkvoorstel Lokaliseren van personen en objecten met behulp van camera s Uitgebreid eindwerkvoorstel Lokaliseren van personen en objecten met behulp van camera s Sofie De Cooman 21 December 2006 Stagebedrijf: Interne begeleider: Externe begeleider: BarcoView Koen Van De Wiele

Nadere informatie

Analyse Programmeertalen

Analyse Programmeertalen Analyse Programmeertalen De keuze van een programmeertaal mag niet onderschat worden. Het is dankzij deze taal dat de gebruiker interactie heeft met het complete systeem. Het is dus vanzelfsprekend dat

Nadere informatie

De nieuwe generatie Toegangsbeheer.

De nieuwe generatie Toegangsbeheer. De nieuwe generatie Toegangsbeheer. Toekomstgericht Toegangsbeheer. Software eigenschappen. Simpel en visueel. Simpel betekent niet basis, het betekent dat het product correct werd ontworpen. Het systeem

Nadere informatie

PHP-OPDRACHT SITE BOUWEN

PHP-OPDRACHT SITE BOUWEN PHP-OPDRACHT SITE BOUWEN PERIODE 4 LEERJAAR 1 Opleiding: Duur: Applicatieontwikkelaar 1 onderwijsperiode (4-8 weken) Voorkennis: Basiscursus PHP 5.4 Victor Peters (978 90 125 8499 9) Basiscursus XHTML,

Nadere informatie

Inhoud. Introductie tot de cursus

Inhoud. Introductie tot de cursus Inhoud Introductie tot de cursus 1 De functie van de cursus 7 2 De inhoud van de cursus 7 2.1 Voorkennis 7 2.2 Leerdoelen van de cursus 8 2.3 Opbouw van de cursus 8 3 Leermiddelen en wijze van studeren

Nadere informatie

Concept Deze week hebben wij ervoor gekozen om de tiled display, die rechts van de ESC balie staat, te verbeteren door een interactieve applicatie eraan te verbinden. Op dit moment is het display, alhoewel

Nadere informatie

HTML. Media. Hans Roeyen V 3.0

HTML. Media. Hans Roeyen V 3.0 Media Hans Roeyen V 3.0 12 maart 2015 Inhoud 1. (Multi)Media op websites... 3 2. Flash en Websites... 4 3. Video op je website... 4 3.1. YouTube insluiten op de pagina... 4 3.2. Video zonder YouTube...

Nadere informatie

Sparse columns in SQL server 2008

Sparse columns in SQL server 2008 Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG

Nadere informatie

Cursus toegepaste informatica 6 TSO

Cursus toegepaste informatica 6 TSO Cursus toegepaste informatica 6 TSO T. Willekens Leerkracht Technisch Atheneum Mol 2010 WOORD VOORAF Deze bundel is samengesteld voor leerlingen van de 3 graad 2 leerjaar (TSO-niveau). Het vak Toegepaste

Nadere informatie

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B; Beschouw bijvoorbeeld de twee onderstaande klassen, waarvan de attributen en eigenschappen geannoteerd zijn met bijkomende XML-annotaties: using System ; using System. Xml ; using System. Xml. S e r i

Nadere informatie

Tekenen met een potlood

Tekenen met een potlood Met SketchUp creëert men zeer snel en eenvoudig 3D oppervlakmodellen en visualiseert deze met texturen en animaties. U kunt schaduwen van de zon evalueren, landschappen creëren, snel uw tekening opsieren

Nadere informatie

Versie 0.4. Documentatie Onsweb Club plugin voor KNKV verenigingen. Laatste wijziging: 19 juli 2012 Auteurs: Marien Dongstra, Sebastian Huisman

Versie 0.4. Documentatie Onsweb Club plugin voor KNKV verenigingen. Laatste wijziging: 19 juli 2012 Auteurs: Marien Dongstra, Sebastian Huisman Documentatie Onsweb Club plugin voor KNKV verenigingen Versie 0.4 Laatste wijziging: 19 juli 2012 Auteurs: Marien Dongstra, Sebastian Huisman Alle rechten in dit document zijn voorbehouden. www.onsweb.nl,

Nadere informatie

Software Test Plan. Yannick Verschueren

Software Test Plan. Yannick Verschueren Software Test Plan Yannick Verschueren November 2014 Document geschiedenis Versie Datum Auteur/co-auteur Beschrijving 1 November 2014 Yannick Verschueren Eerste versie 1 Inhoudstafel 1 Introductie 3 1.1

Nadere informatie

InterSmart: A Twitter based quiz application for PowerPoint audiences

InterSmart: A Twitter based quiz application for PowerPoint audiences Scriptie ingediend tot het behalen van de graad van PROFESSIONELE BACHELOR IN DE ELEKTRONICA-ICT InterSmart: A Twitter based quiz application for PowerPoint audiences David De Beuckelaer bachelor elektronica-ict

Nadere informatie

HANDLEIDING DMS Plugin Installatie, configuratie & werking

HANDLEIDING DMS Plugin Installatie, configuratie & werking HANDLEIDING DMS Plugin Installatie, configuratie & werking Dit document is de handleiding voor de installatie, configuratie en werking van de DMS Plugin. Versie 1-12/09/2005 Inhoudstafel 1 Installatie...

Nadere informatie

Programmeren in Java 3

Programmeren in Java 3 26 september 2007 Deze les korte herhaling vorige les Unified Modelling Language notatie van een class afleiding pointers abstracte classes polymorphisme dubieuze(?) constructies interfaces Meer over class

Nadere informatie

Copyright IBS 2006. Nieuwbouw. Vereenvoudigd en versnelt Java ontwikkeling. Huub Cleutjens

Copyright IBS 2006. Nieuwbouw. Vereenvoudigd en versnelt Java ontwikkeling. Huub Cleutjens Nieuwbouw Vereenvoudigd en versnelt Java ontwikkeling Huub Cleutjens Inhoud IBS en Java Keuzes: taal / architectuur Productiviteit / arbeidsdeling IBS Java Development Accelerator Persistence UI Persistence

Nadere informatie

PROJECT: IRIS. (Plan van aanpak) Naam Functie Paraaf

PROJECT: IRIS. (Plan van aanpak) Naam Functie Paraaf Plan van aanpak IRIS Documenthistorie Revisies Versie Status Datum Wijzigingen PROJECT: IRIS (Plan van aanpak) Goedkeuring Dit document behoeft de volgende goedkeuringen: Versie Datum goedkeurin g Naam

Nadere informatie

Software Engineering Groep 4

Software Engineering Groep 4 Software Engineering Groep 4 Software Design Description Jeroen Nyckees (Design Manager) Jan-Pieter Hubrecht (Project Manager) 3 e Bachelor Computerwetenschappen se4-1112@wilma.vub.ac.be 11 december 2011

Nadere informatie

Introductie testtooling Wink

Introductie testtooling Wink Introductie testtooling Wink SYSQA B.V. Almere Datum : 10-04-2013 Status : 1.0 Opgesteld door : Organisatie SYSQA B.V. Pagina 2 van 16 Inhoudsopgave 1 Inleiding... 3 1.1 Opbouw... 3 2 Wink... 4 2.1 Wat

Nadere informatie

DrICTVoip.dll v 2.1 Informatie en handleiding

DrICTVoip.dll v 2.1 Informatie en handleiding DrICTVoip.dll v 2.1 Informatie en handleiding Nieuw in deze versie : Koppeling voor web gebaseerde toepassingen (DrICTVoIPwebClient.exe) (zie hoofdstuk 8) 1. Inleiding Met de DrICTVoIP.DLL maakt u uw software

Nadere informatie

Project plan. Erwin Hannaart Sander Tegelaar 61849 62407

Project plan. Erwin Hannaart Sander Tegelaar 61849 62407 Project plan Erwin Hannaart Sander Tegelaar 61849 62407 I4C2 I4C1 1 Inhoudsopgave Doel en doelgroep van het project... 3 Beschrijving van het project... 4 Benodigde materialen... 5 Te verwachten resultaten,

Nadere informatie

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP.... 8 Joomla installeren op XAMPP... 15 Handige links... 16 2 Disclaimer Bij de samenstelling

Nadere informatie

INHOUDSOPGAVE 3. 3.5 Het Boekenwinkeltje... 90 3.5.1 Registreer.aspx... 90 3.6 Opgaven... 97

INHOUDSOPGAVE 3. 3.5 Het Boekenwinkeltje... 90 3.5.1 Registreer.aspx... 90 3.6 Opgaven... 97 Inhoudsopgave 1 Inleiding 8 1.1 Het.Net Framework................................ 8 1.1.1 Het.Net Ontwikkelingsmodel....................... 8 1.1.2 Compilatie en Uitvoering in.net.....................

Nadere informatie

Flat Design - Robbert Kooiman G&I 1-C - 1 -

Flat Design - Robbert Kooiman G&I 1-C - 1 - Flat Design - Robbert Kooiman G&I 1-C - 1 - Om een unieke draai te geven aan de game die we gaan maken voor het project Playable, ga ik me verdiepen in een aparte stijl. De stijl die ik heb gekregen is

Nadere informatie

Modulewijzer tirprog02/infprg01, programmeren in Java 2

Modulewijzer tirprog02/infprg01, programmeren in Java 2 Modulewijzer tirprog02/infprg01, programmeren in Java 2 W. Oele 17 november 2009 1 Inhoudsopgave 1 Inleiding 3 2 Studiehouding 3 3 Voorkennis 4 4 Inhoud van deze module 5 5 Leermiddelen 5 6 Theorie en

Nadere informatie

Aan het eind van deze lesbrief wordt uitgelegd wat het nut van OOP is en vind je een aantal oefenopdrachten.

Aan het eind van deze lesbrief wordt uitgelegd wat het nut van OOP is en vind je een aantal oefenopdrachten. Doel van deze lesbrief Deze lesbrief is bedoeld om je op de hoogte te brengen van de basisbegrippen die gangbaar zijn bij object georiënteerd programmeren (OOP). In deze lesbrief kom je korte codefragmenten

Nadere informatie

Inleiding Visual Basic en VBA. Karel Nijs 2009/01

Inleiding Visual Basic en VBA. Karel Nijs 2009/01 Inleiding Visual Basic en VBA Karel Nijs 2009/01 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen Ms Excel 2003 Online hulp: http://www.ozgrid.com/vba/ http://msdn.microsoft.com/en-us/library/sh9ywfdk(vs.80).aspx

Nadere informatie

WordPress in het Kort

WordPress in het Kort WordPress in het Kort Een website maken met Wordpress. In minder dan één uur online! Inclusief installatie van een thema en plugins Alle rechten 2013, Rudy Brinkman, BrinkhostDotCom, http://www.brinkhost.nl

Nadere informatie

Projectorganisatie Marc Martojo Esther krijnen Rodger Buyvoets Danilo Meulens

Projectorganisatie Marc Martojo Esther krijnen Rodger Buyvoets Danilo Meulens Concrete projectbeschrijving De afstudeeropdracht is om een informatief, innovatief en interactief boek te ontwikkelen dat als presentatie materiaal gebruikt kan worden om weer te geven hoe bijzonder en

Nadere informatie

Dynamiek met VO-Script

Dynamiek met VO-Script Dynamiek met VO-Script Door Bert Dingemans DLA Ontwerp & Software bert@dla-architect.nl Inleiding Op de SDGN nieuwsgroep voor Visual Objects ontstond laatst een draad van berichten over de nieuwe libraries

Nadere informatie

Beschrijving functioneel en technisch design van de website

Beschrijving functioneel en technisch design van de website Bespreking Punten: Beschrijving functioneel en technisch design van de website Nr. Punt 1 Student 2 Bedrijf 3 Algemene lay out 4 Technologieën 5 Webruimte en datatrafiek 1. Student Registratie Bij de registratie

Nadere informatie

Software-Ontwikkeling I Academiejaar 2006-2007

Software-Ontwikkeling I Academiejaar 2006-2007 Software-Ontwikkeling I Academiejaar 2006-2007 Project: Bibliotheekbeheer 1 1. Digitale bibliotheek a. Inleiding Bibliotheken houden onder meer hun collecties van uitleenbare artikels bij in digitaal formaat.

Nadere informatie

Vraag 1. Vraag 1a TERUGKOPPELING PROEFTENTAMEN. Software architecture

Vraag 1. Vraag 1a TERUGKOPPELING PROEFTENTAMEN. Software architecture Software architecture IM0203 TERUGKOPPELING PROEFTENTAMEN Vraag 1 Vraag 1a Veel van de in het werkboek besproken patterns kunnen ingezet worden voor het referentiesysteem. We lopen de patterns hier stuk

Nadere informatie

VERENIGINGSWIJZER.NL FINAL DOCUMENT

VERENIGINGSWIJZER.NL FINAL DOCUMENT Vrije Universiteit Amsterdam Faculteit der Exacte Wetenschappen Project Multimedia Peter van Ulden Studentnr. 1494759 VERENIGINGSWIJZER.NL FINAL DOCUMENT INHOUDSOPGAVE 1 Inleiding...3 2 Aanpak & Techniek...4

Nadere informatie

Project. 3D-Fraggel. Plan van aanpak. Door: IH1T08 1/1

Project. 3D-Fraggel. Plan van aanpak. Door: IH1T08 1/1 Project 3D-Fraggel Plan van aanpak Door: 1/1 Project 3D-Fraggel Plan van aanpak Datum: 07-05-2001 Plaats: Enschede Opdrachtgever: Saxion Hogeschool Enschede Instituut ICT Afdeling Hogere Informatica Contactpersoon

Nadere informatie

Technische Specificaties nieuwe Unix Applikaties

Technische Specificaties nieuwe Unix Applikaties Technische Specificaties nieuwe Unix Applikaties In 2010 werden 7 Unix servers geconsolideerd naar een nieuwe Unix omgeving, waar gebruik gemaakt wordt van srp s (vergelijkbaar met zone, of container).

Nadere informatie

WELKOM BIJ BOMBERBOT! LES 1: WAT IS PROGRAMMEREN LES 1: WAT IS PROGRAMMEREN WAAR GAAT DEZE LES OVER? INTRODUCTIE

WELKOM BIJ BOMBERBOT! LES 1: WAT IS PROGRAMMEREN LES 1: WAT IS PROGRAMMEREN WAAR GAAT DEZE LES OVER? INTRODUCTIE WELKOM BIJ BOMBERBOT! Bij onze lessen horen ook nog een online game, waarin de leerlingen de concepten die ze geleerd krijgen direct moeten toepassen, en een online platform, waarin u de voortgang van

Nadere informatie

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving,

Nadere informatie

Tim Mallezie Architectuur van besturingssystemen: Vraag A2.

Tim Mallezie Architectuur van besturingssystemen: Vraag A2. Procesbeheer: kenmerken van moderne besturingssystemen. 1. Bespreek de (drie) meest typische kenmerken van moderne besturingssystemen. 2. In hoeverre beantwoorden UNIX, Linux en Windows NT hieraan? Geef

Nadere informatie

Netwerk Interfacing Data Logging.

Netwerk Interfacing Data Logging. Handleiding Netwerk Interfacing Data Logging. EduTechSoft.nl 2009-2010 H.O.Boorsma. Pagina - 2 - Netwerk Interfacing Data Logging Pagina - 3 - Inhoud Inleiding.... 4 Beschrijving van het programma....

Nadere informatie

Afstudeeropdracht bachelor informatica

Afstudeeropdracht bachelor informatica Webgebaseerde ontsluiting loggegevens van IDEAS Afstudeeropdracht bachelor informatica David Beniers, Anand Mandhre, Michiel van Kempen Bastiaan Heeren, Harold Pootjes Inhoud Opdracht IDEAS Aanpak Taakverdeling

Nadere informatie

VI. Klassen en objecten

VI. Klassen en objecten VI. Klassen en objecten Klassen en objecten vormen het fundament van OOP. We zullen dus uitgebreid aandacht besteden aan klassen en objecten. U kunt Java niet begrijpen zonder goed met klassen en objecten

Nadere informatie

1 De basis. Documenten om te bewaren. Extra leesvoer: Start Here Handleiding Gamemaker. 2 Geschiedenis van Games en Gamegenres

1 De basis. Documenten om te bewaren. Extra leesvoer: Start Here Handleiding Gamemaker. 2 Geschiedenis van Games en Gamegenres Hieronder staat de inhoudsopgave van de cursus gamedesign op www.gameskool.nl. (wijzigingen in het cursusprogramma onder voorbehoud). De lessen bestaan uit (instructie- )video s, video s met voorbeelden,

Nadere informatie

Katholieke Hogeschool Kempen

Katholieke Hogeschool Kempen Katholieke Hogeschool Kempen Campus Geel Departement Handelswetenschappen en Bedrijfskunde 3de jaar Toegepaste Informatica Labo 1 Beheer van databanken Svenia CLAES (3TI3) Britt JACOBS (3TI3) Lies VAN

Nadere informatie

Projectdocument Airport Suite. The Wright Company: Zehna van den Berg Steven Both Reinier Maas Adolfo Ochagavía Bas Ouwerkerk Thijs van der Zaan

Projectdocument Airport Suite. The Wright Company: Zehna van den Berg Steven Both Reinier Maas Adolfo Ochagavía Bas Ouwerkerk Thijs van der Zaan Projectdocument Airport Suite The Wright Company: Zehna van den Berg Steven Both Reinier Maas Adolfo Ochagavía Bas Ouwerkerk Thijs van der Zaan December 2013 Contents 1. Overzicht... 4 2. Planning... 5

Nadere informatie

Hoorcollege 1 datavisualisatie 21-11-12

Hoorcollege 1 datavisualisatie 21-11-12 Hoorcollege 1 21-11-12 docenten! http://vimeo.com/31244010#at=10 hoorcollege 1 introductie HVA CMD V2 21 november 2012!! justus sturkenboom! j.p.sturkenboom@hva.nl! yuri westplat! y.westplat@hva.nl! vandaag

Nadere informatie

Data quality tracking tool

Data quality tracking tool Data quality tracking tool Stageproject Over data cleansing werk Eén van de onderdelen van werk rond datakwaliteit uitgevoerd door Kapernikov is het systematisch oplossen van gedetecteerde datafouten in

Nadere informatie

Informatica in het hoger onderwijs / gametechnologie

Informatica in het hoger onderwijs / gametechnologie Informatica in het hoger onderwijs / gametechnologie maak je eigen app (gids, game, simulatie, toepassing) GameTechnologie en Informatica GameTechnologie wordt wereldwijd ingezet om leuke games te maken,

Nadere informatie

HET BESTURINGSSYSTEEM

HET BESTURINGSSYSTEEM HET BESTURINGSSYSTEEM Een besturingssysteem (ook wel: bedrijfssysteem, in het Engels operating system of afgekort OS) is een programma (meestal een geheel van samenwerkende programma's) dat na het opstarten

Nadere informatie

VMBO-ICT-Route examen 2009 Naam: Marc Schattorie Datum: 06-03-09

VMBO-ICT-Route examen 2009 Naam: Marc Schattorie Datum: 06-03-09 VERSLAG BICS INSTRUCTIIEFIILMPJES VMBO-ICT-Route examen 2009 Naam: Marc Schattorie Datum: 06-03-09 Inhoudsopgave Gebruik BICS..blz. 3 Onderzoek naar korte instructiefilms...blz. 3 Onderzoek naar screenrecorders.blz.

Nadere informatie

Tips & Tricks: Tip van de maand November 2010. Office Integratie

Tips & Tricks: Tip van de maand November 2010. Office Integratie Tips & Tricks: Tip van de maand November 2010 Door: Martijn Janssen Introductie Office Integratie De Teamcenter MS Office-integratie maakt gebruik van Microsoft Office 2003 of 2007 in een beheerde Teamcenter

Nadere informatie

Het Wepsysteem. Het Wepsysteem wordt op maat gebouwd, gekoppeld aan de gewenste functionaliteiten en lay-out van de site. Versie september 2010

Het Wepsysteem. Het Wepsysteem wordt op maat gebouwd, gekoppeld aan de gewenste functionaliteiten en lay-out van de site. Versie september 2010 Het Wepsysteem Het Wepsysteem is een content management systeem, een systeem om zonder veel kennis van html of andere internettalen een website te onderhouden en uit te breiden. Met het Content Management

Nadere informatie

voegt Piet Geelen toe, er is veel materiaal te vinden op het web, ook rechtenvrij. Frans Peeters heeft geaccepteerd dat hij niet alles weet.

voegt Piet Geelen toe, er is veel materiaal te vinden op het web, ook rechtenvrij. Frans Peeters heeft geaccepteerd dat hij niet alles weet. Games in de klas? Wat is nog leuker dan het spelen van games? Het zelf maken van een game! Het blijkt dat jongeren die graag videogames spelen het ook leuk vinden om zelf een game te maken. En het is nog

Nadere informatie

Objecten en klassen. 1.1 Objectgeoriënteerde taal

Objecten en klassen. 1.1 Objectgeoriënteerde taal Objectgeoriënteerde taal Object Klasse Instantie Java in BlueJ Toestand van een object Klassendefinitie Herhalingsoefeningen Objecten en klassen 1.1 Objectgeoriënteerde taal Als je een computerprogramma

Nadere informatie

Werkomgeving. Android Studio. Android - werkomgeving 1/6

Werkomgeving. Android Studio. Android - werkomgeving 1/6 Android - werkomgeving 1/6 Werkomgeving Android Studio Installatie Ga naar de volgende URL: http://developer.android.com/sdk/index.html Klik op de knop "Download Android Studio for Windows" om het programma

Nadere informatie

Cloud Computing. Definitie. Cloud Computing

Cloud Computing. Definitie. Cloud Computing Cloud Computing Definitie In de recente literatuur rond Cloud Computing zijn enorm veel definities te vinden die het begrip allemaal op een verschillende manier omschrijven. Door deze diversiteit zijn

Nadere informatie

Voordat er optimaal gebruik gemaakt kan worden gemaakt van Magister 5 via het web, kan deze FAQ mogelijk van pas komen.

Voordat er optimaal gebruik gemaakt kan worden gemaakt van Magister 5 via het web, kan deze FAQ mogelijk van pas komen. Silverlight FAQ t.b.v. Magister 5 Voordat er optimaal gebruik gemaakt kan worden gemaakt van Magister 5 via het web, kan deze FAQ mogelijk van pas komen. Zie de algemene Microsoft Silverlight FAQ op: http://www.microsoft.com/silverlight/faq/

Nadere informatie

Producten en prijzen 2012

Producten en prijzen 2012 Informatica Voortgezet Onderwijs Postbus 38 2410 AA Bodegraven Nederland Tel. 0172-65 09 83 Fax 0172-61 83 15 www.instruct.nl instruct@instruct.nl België www.instruct.be instruct@instruct.be Producten

Nadere informatie

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. Herhaling Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. De basisbouwsteen is het object; een geïntegreerde eenheid van data en operaties werkend op deze

Nadere informatie

Uitgebreid voorstel Masterproef Informatica. Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent

Uitgebreid voorstel Masterproef Informatica. Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent HoGent Uitgebreid voorstel Masterproef Informatica Titel van het project : Ontwikkeling van remote controlled Alert & Task Agent Datum: Naam student: Glenn Jacob Interne promotor: Wim Van den Breen In

Nadere informatie

Interactief, real time security management

Interactief, real time security management P2000 en P2000LE SECURITY MANAGEMENT SYSTEEM Interactief, real time security management P2000 Security Management Systeem Schaalbaar, intuïtief en eenvoudig in gebruik Het Johnson Controls P2000 security

Nadere informatie

Adobe Flash CS3 Professional

Adobe Flash CS3 Professional Channel Copy Adobe Flash CS3 Professional De volgende tekstblokken kunnen worden gebruikt in advertenties, catalogi of ander promotiemateriaal voor Adobe Flash CS3 Professional. Adobe Flash CS3 Professional

Nadere informatie

Versie: 1.0 Gemaakt door: Whisper380 Eigenaar: Whisper380-computerhulp.net Datum: 8-6-2011

Versie: 1.0 Gemaakt door: Whisper380 Eigenaar: Whisper380-computerhulp.net Datum: 8-6-2011 Versie: 1.0 Gemaakt door: Whisper380 Eigenaar: Whisper380-computerhulp.net Datum: 8-6-2011 Whisper380-computerhulp.net 1 Inhoudsopgave Libreoffice downloaden:...3 Libreoffice installeren...4 Java runtime

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale

Nadere informatie

Reliance 4 First Steps. First steps. Versie 1.0 03-10-2008-1- B3 industrie b.v.

Reliance 4 First Steps. First steps. Versie 1.0 03-10-2008-1- B3 industrie b.v. First steps Versie 1.0 03-10-2008-1- 1. Introductie Het doel van deze handleiding is om een nieuwe gebruiker kennis te laten maken met de basisfuncties van Reliance 4 Design de ontwikkelomgeving van Reliance

Nadere informatie

Functionele beschrijving: scannen naar Exact Globe.

Functionele beschrijving: scannen naar Exact Globe. Functionele beschrijving: scannen naar Exact Globe. Algemeen Met de KYOCERA scannen naar Exact Globe beschikt u over een efficiënte oplossing om uw documenten te scannen naar Exact Globe. Met deze oplossing

Nadere informatie