Benutzer-Werkzeuge

Webseiten-Werkzeuge


project:framework:gamecore.js

GameCore.js

GameCore.js ist ein JavaScript-Framework für Offline- und Webspiele, das von Llandyl seit August 2013 als Freizeitprojekt entwickelt wird. Aktuell unterstützt es nur 2D-Grafik, allerdings soll in Zukunft auch um 3D-Grafikunterstützung per WebGL erweitert werden.

Module

Logikkern

GameCore.js

Das Kernmodul stellt die Game-Klasse bereit. Jede Instanz aggregiert die zu einem Spiel gehörigen Darstellungslayer, InputHandler und den Audioplayer. Sie stellt die zentrale Updateschleife bereit, legt deren Framerate fest und merkt sich die seit dem Start vergangene Spieldauer in Millisekunden. Zusätzlich enthält sie Methoden zum Hinzufügen von Objekten und zum Leeren von Layern.

BasicStructures.js

Dieses Hilfsmodul stellt häufig benötigte Datenstrukturen wie Vektoren zur Verfügung.

2D-Grafik

Object2D.js

Die Object2D-Klasse repräsentiert ein grafisches 2D-Element, das entweder eine Textur oder ein beliebiges DOM-Objekt ist. Sie speichert seinen Zustand:

Wird das Objekt zu einem Spiellayer hinzugefügt, wird der Status beim Rendern auf den CSS-Style des zugehörigen DOM-Elements übertragen. Bei der Erzeugung eines Object2D aus einer Textur ein passendes Element generiert, in der Regel ein img.

Animation2D.js

Eine Animation stellt eine zeitabhängige Veränderung, i.d.R. von Grafikparametern dar. Sie kann aber auch allgemeiner verwendet werden, um Spielereignisse anzustoßen, regelmäßig Werte abzufragen und darauf zu reagieren. Den Kern bildet die frameEffect-Funktion. Diese muss vom Verwender der Animation überschrieben werden und gibt an, was in jedem Frame, in dem die Animation aktiv ist, passieren soll. Das Zielobjekt der Animation ist AnimatedObject. Animationen können weitere Animationen erzeugen und dadurch beliebig komplexe Veränderungen vornehmen.

Es gibt mehrere Klassen von Standardanimationen, die auf 2D-Objekte abzielen. Darunter fallen u.a. geradlinige Bewegungen, Kreisbewegungen, alternierende Bewegungen und Fade-Effekte. Die Animationen werden wie Objekte an Layern registriert, die bei jedem Rendervorgang den frameEffect jeder registrierten Animation aktivieren.

Layer.js

Ein Layer ist eine grafische Schicht, ähnlich denen, die bei Bildbearbeitungsprogrammen zum Einsatz kommen. Durch die Schichten ist es möglich, Vordergrund, Hintergrund und Zwischenebenen zu trennen. Jede Schicht verwaltet ihre eigenen Objekte und Animationen. So ist es z.B. möglich, Menüoverlays zu definieren oder mehrlagige Level aufzubauen. Die Layer eines Levels, einer Zwischensequenz oder eines Menüs werden jeweils in einer Stage gebündelt.

Stage.js

Eine Stage fasst die Darstellungslayer und die spezifische Logik eines Levels, einer Sequenz oder einer in sich geschlossenen Oberfläche im Spiel zusammen. Dazu muss die initialize-Methode implementiert werden, die die Bühnenlayer, -objekte und -animationen erzeugt und die terminate-Methode, die sie wieder aufräumt und ggf. Verbindungen zu Netzwerken oder zur Datenschicht trennt.

Audio

Audio.js

Jedes Spiel braucht Soundeffekte. Seit HTML5 können alle gängigen Browser durch Einbindung eines audio-Elements nativ Soundsamples abspielen. Das Audiomodul erlaubt das Abspielen von Musik oder Soundeffekten, indem es HTML5-Audioelemente jeweils bedarfsorientiert zu einer Szene hinzugefügt und abspielt. Wird ein Audiotag gerade verwendet und derselbe Sound erneut abgespielt, wird ein neues Audio-Element mit demselben Namen erzeugt. Existieren noch freie Audioelemente zu einem Sound, werden zunächst diese verwendet, ehe neue erzeugt werden. Für häufig abgespielte Sounds entsteht innerhalb einer Stage damit ein Pool von Audioelementen, unter denen das Abspielen lastabhängig verteilt wird. Es ist empfehlenswert, die zu verwendenden Soundquellen beim Initialisieren einer Stage am Audiomodul zu registrieren. Dadurch können sie vorgeladen werden, sodass es beim ersten Abspielen zu keiner Verzögerung kommt.

Quellen

1: Aaron Reed: Learning XNA 4.0: Game Development for the PC, Xbox 360, and Windows Phone 7. Oreilly. 2010. Amazon

project/framework/gamecore.js.txt · Zuletzt geändert: 2015/11/03 21:09 von llandyl