You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
4.7 KiB
HTML

<!menue>
<!h2a=Grundlagen,Grundlagen,Grundlagen>
Das Framework setzt man auf indem man ein Root Objekt anlegt. Dieses Root Objekt beinhaltet ein Layer-Faktory Objekt.
Root übernimmt die Kontroll- und Steuerfunktione, Layerfaktory übernimmt das erzeugen und addressieren der Layer Objekte.
Layer Objekte sind einzelne Ebenen die von unterschiedlichen Typen sein können.
Es gibt im Framework viele vordefinierte Typen, über die selbst abgeleitete Layerfaktory können aber eigenen Typen und abgeleitet Typen erzeugt werden.
Ein Layer, Ebene, wird als eigenständiges Objekt gesehen, das auch alleine existieren kann.
<§f=Aufgaben von Root:§>
<!ul=
\Initialisierung des Games, Bildschirms, Mapgrösse etc.
\Wechseln zwischen Game States z.b. Intro, Menü, Levelinit, Level, Gameover, etc.
\Erzeugen von Actoren
\Zeichnen und Bewegen der Actoren in verschiedenen Ebenen (z.b Background, Sprites, Mouse).
\Vermitteln und Übersetzen von Nachrichten
=ul>
<!h2=Framework Organisation>
<!img=Root_Framework.gif,Root steuert von oben nach unten die einzelnen Layer Objekte>
Das Framework benötigt eine bestimmte Organisation.
Die Wurzel von allem ist das Root Objekt.
Das Root Objekt steuert <wH>zwei <wH>Actor <wH>Queues und <wH>ein <wH>State <wH>Object.
<!ul=
\GLOBALOBJECT QUEUE.
\STATEOBJECT -> LAYERFACTORY QUEUE.
=ul>
<b>Begriffserklärungen:</b>
<!ul=
\QUEUE ... Allgemeiner Begriff für eine Objectliste die auf <wT>CActor Objekte zeigt.
\GLOBALOBJECT .... Eine Global-Object ist ein vordefinierter Layer der im Framework ausprogrammiert ist und verwendet werden kann.
\STATE ... Ein logischer Zustand des Spiel. Als States kann man definieren: Intro, Heuptmenü, LevelInit, Level, Gameover, Hiscore und dergleichen.
\STATEOBJECT ... Objekt abgeleitet von <wT>CRoot. Über Root kann mit <wF>initstate und <wF>newstate ein State Objekt erzeugt werden.
=ul>
<!h2a=Globale Objekte,Globale Objekte,GlobalObjects>
Globale Objekte sind vorprogrammierte Layer die entweder wichtig für das funktionieren für das Framework sind oder einfach für viele Gameprojekte Standardmässig Verwendung finden. Beim Initialisieren vom Root Objekt werden die globalen Layer Objekte eingehängt.
<!h2a=Kommunikation,Kommunikation,Kommunikation>
Layer Objekte sowie Root und alle globalen Objekte verstehen Kommandos in Form von Asciistrings. Jedes Objekt hat eine Message Funktion der dieser String übergeben wird. Root hat für die Verteilung der Messages auch noch zwei Funktionen:
<wF>Root::SendMsg() und <wF>Root::HiPriMsg().
Root::SendMsg() speichert die Message auf eine Queue die am Ende eines Frameloops abgearbeitet wird. Root nimmt die erste message aus der queue und iterriert alle Objekte durch. <!link=Root::HiPriMsg()> iterriert die Objekte sofort durch, auch während des Frameloops.
<!h2a=State Objekt,Logische Abschnitte in einem Spiel,Stateobjects>
Für jedes der einzelnen STATES bei einem Game ist auch eine eigene Programmierung nötig. Ein Menü tut einfach etwas anderes als ein Level Programm.
Diese States werden in STATE Objekte abgebildet die vom Root geladen und initialisiert werden können.
Bei Spielstart wird in der Root InitPlayfield Methode neben dem Bildschirm Modus daher auch der erste Game-State gesetzt. Ein Satewechsel passiert wieder durch die Root Funktionen <wF>newstate oder <wF>initstate.
Dieses Framework ist so aufgesetzt, dass jeder Sate ein eigenes Verzeichnis mit einem state.cfg File besitzt. Die Verzeichnissstruktur und der Filename von state.cfg ist frei wählbar, für die Dokumentation und für die Beispiele sind die Vorgaben folgende:
1) Hauptverzeichnis für GameResourcen: <wV>data
2) Für jeden State ein Subverzeichnis
3) Das State Initialisierungsskript heisst <wD>state.cfg
<!h2a=File Organisation,File Organisation,FileOrganisation>
Die Fileorganisation beginnt ab dem Root Verzeichnis. Damit ist das Verzeichnis gemeint indem sich die Game Exe befindet. Innerhalb dieses Root Verzeichnisses können beliebige Unterverzeichnisse angelegt werden. Organisatorisch sollte man die einzelnen Game-States auch in verschiedene Verzeichnisse legen:
<pre>
[root]
/game.exe
/data/
| /intro/
| | /background.png
| | /state.cfg
| |
| /menu/
| /menubkgnd.png
| /menutilemap.png
| /wave1.wav
</pre>
<!h2a=Bildschirm,Organisation des Bildschirms,Displayorganisation>
<!img=Root_Framework2.gif>
Der Bildschirm wird in Layer Schichten aufgebaut, d.h. jeder Layer hat eine <wG>zorder. Das Background Object hat die zorder 0, danach wird aufsteigend, der zorder nach, jedes der anderen Layer darüber gezeichnet.
Layer mit gleicher zorder werden in unbestimmter Reihenfolge gezeichnet. Der Wert für zorder ist frei wählbar, sollte aber Raum für das nachträgliche einfügen von layers vorhanden sein.
Beispielprojekt:
ZOrderSample.zip