GameManager
Übersicht

![]() |
JolinahBetreff: GameManager |
![]() Antworten mit Zitat ![]() |
---|---|---|
~AUFSPALTUNG~ und ~EDITIERT~ Habe den Ursprungsthread geteilt und hier Jolinahs Nachricht nochmal eingefügt! DivineDominion - - - - - - @digga [Bezieht sich auch auf den Ursprungsthread]: Da es Sourcecode ist müsstest du im mod\pub.mod Ordner von BlitzMax den Ordner "gamemanager.mod" anlegen und den Code als "gamemanager.bmx" da rein kopieren. Nächster Schritt wäre das kompilieren des Moduls, dazu musst du MinGW (gcc) installiert haben und dann im Menu von BMax Build Modules anklicken. Ansonsten kann ich dir auch die kompilierte Version Online stellen. Jolinah aus Ursprungsthread hat Folgendes geschrieben: Finde das kann man recht gut gebrauchen, daher hab ich mir mal erlaubt es in ein Modul umzuschreiben
![]() Da es doof wäre wenn man ein Modul dauernd ändern müsste hab ich den Vorgang mit SetGameState geändert so dass man das Modul immer unverändert lassen kann. Edit: Gehört jetzt vielleicht eher in Module.. Hab absichtlich bei ModuleInfo nix reingeschrieben weil ich den Hauptcode ja von Divi habe ![]() Code: [AUSKLAPPEN] Strict Module pub.GameManager ModuleInfo "Name:" ModuleInfo "Version:" ModuleInfo "Author:" Import brl.system Import brl.glmax2d 'Basisklasse für Gamestates Type TGameState Abstract 'Starten des Gamestates (laden etc.) Method Enter() End Method 'Hauptschleife des Gamestates Method Process() End Method 'Beenden des Gamestates (resourcen freigeben etc.) Method Leave() End Method 'Zeichnen des Gamestates (kann in Process() aufgerufen werden) Method Draw() End Method End Type 'Standard-Gamestate, wird beim Starten des Gamemanagers als Hinweis verwendet dass noch keine eigenen Gamestates erstellt wurden. Type TMainGameState Extends TGameState Final Field _lines:TList Method Enter() _lines = New TList _lines.AddLast("Noch keine States erstellt / No states created") _lines.AddLast("Druecke ESC zum Beenden / Press ESC Key to quit") _lines.AddLast("") _lines.AddLast("Beispiel eines Gamestates / Example of a gamestate") _lines.AddLast("") _lines.AddLast("") _lines.AddLast("Type TMyGameState extends TGameState") _lines.AddLast(" Method Enter()") _lines.AddLast(" 'Entering Gamestate") _lines.AddLast(" End Method") _lines.AddLast("") _lines.AddLast(" Method Process()") _lines.AddLast(" 'Mainloop of this Gamestate") _lines.AddLast(" If KeyHit(KEY_ESCAPE) then GameManager.SetGameState(Null)") _lines.AddLast(" Draw()") _lines.AddLast(" End Method") _lines.AddLast("") _lines.AddLast(" Method Leave()") _lines.AddLast(" 'End of Gamestate") _lines.AddLast(" End Method") _lines.AddLast("") _lines.AddLast(" Method Draw()") _lines.AddLast(" 'Draw") _lines.AddLast(" End Method") _lines.AddLast("End Type") _lines.AddLast("") _lines.AddLast("") _lines.AddLast("Local MyState:TMyGameState = new TMyGameState") _lines.AddLast("") _lines.AddLast("GameManager.Run(MyState)") End Method Method Process() If KeyHit(KEY_ESCAPE) Then GameManager.SetGameState(Null) Return EndIf Draw() End Method Method Leave() _lines.Clear() _lines = Null End Method Method Draw() Local count = 0 For Local line:String = EachIn _lines DrawText line, 10, count * 20 + 10 count :+ 1 Next End Method End Type 'FPS Manager - für frameunabhängiges Programmieren Type TFPSManager Field _fps Field _fps_counter Field _fps_timer Field _fps_value:Float Field _fps_begin Method New() _fps_begin = MilliSecs() End Method 'Aktualisiert die FPS Daten Method Update() Local ms = MilliSecs() _fps_value = (ms - _fps_begin) / 1000.0 _fps_begin = ms If ms >= _fps_timer _fps = _fps_counter * 5 _fps_counter = 0 _fps_timer = ms + 200 '1/5 einer Sekunde Else _fps_counter :+ 1 EndIf End Method 'Gibt die aktuellen FPS zurück Method FPS() Return _fps End Method 'Multipliziert den FPS Faktor mit einer Geschwindigkeit in pixel/sek. und gibt das Ergebnis zurück. Method FPS_Val:Float(value:Float) Return _fps_value * value End Method End Type 'Gamemanager Type TGameManager Field _state:TGameState 'aktueller Gamestate der ausgeführt wird. Field _quit:Byte 'gibt an ob das Spiel beendet ist. Field _fps:TFPSManager 'frameunabhängiges Programmieren und FPS 'Start des Spiels mit übergabe einer GameState Instanz, wenn keine vorhanden wird TMainGameState als Hinweis benutzt. Method Run(State:TGameState = Null) If State = Null _state = New TMainGameState Else _state = State EndIf _state.Enter() _quit = False _fps = New TFPSManager 'Hauptschleife des Spiels While Not _quit _fps.Update() Cls Update() Flip FlushMem Wend Terminate() End Method 'Führt den aktuellen GameState aus, wenn keiner vorhanden wird _quit auf True gesetzt. Method Update() If _state _state.Process() Else _quit = True EndIf End Method 'Gibt vom aktuellen Gamestate verwendete Resourcen frei und setzt den Gamestate auf Null. Method Terminate() If _state _state.Leave() _state = Null EndIf End Method 'Ändert den Gamestate. Auch Null möglich (wodurch das Spiel beendet wird). Method SetGameState(NewState:TGameState) If _state _state.Leave() EndIf _state = NewState If _state _state.Enter() EndIf End Method 'Gibt die aktuellen FPS zurück Method FPS() Return _fps.FPS() End Method 'Multipliziert den FPS Faktor mit einem Wert, wird für die frameunabhängige Programmierung benötigt. Method FPS_Val:Float(value:Float) Return _fps.FPS_Val(value) End Method End Type 'Globale Instanz vom GameManager Global GameManager:TGameManager = New TGameManager Dann noch eine Beispielanwendung: Code: [AUSKLAPPEN] Strict Type TMyState Extends TGameState Field x:Float, y:Float Method Enter() x = 10.0 y = 200.0 End Method Method Process() If KeyHit(KEY_ESCAPE) Then GameManager.SetGameState(Null) Return EndIf If KeyHit(KEY_SPACE) Then GameManager.SetGameState(New TMyOtherState) Return EndIf x :+ GameManager.FPS_Val(50.0) Draw() End Method Method Leave() End Method Method Draw() DrawText GameManager.FPS(), 10, 300 DrawRect x, y, 10, 10 End Method End Type Type TMyOtherState Extends TGameState Method Enter() End Method Method Process() If KeyHit(KEY_ESCAPE) Then GameManager.SetGameState(Null) Return EndIf If KeyHit(KEY_SPACE) Then GameManager.SetGameState(New TMyState) Return EndIf Draw() End Method Method Leave() End Method Method Draw() DrawText "Der andere Gamestate", 10, 10 End Method End Type '**** HAUPTTEIL **** Graphics 1024,768,32,-1 GameManager.Run(New TMyState) EndGraphics FlushMem End Was haltet ihr davon? Edit2: Mit dieser Variante kann man sogar GameStates beibehalten. Also man wechselt auf einen anderen GameState und speichert den alten in einer Variable. Dann kann man wieder auf diesen zurückschalten und alles läuft von da an weiter wo man aufgehört hat. |
||
![]() |
diGGaGruppenKaspar |
![]() Antworten mit Zitat ![]() |
---|---|---|
versteh bei den downloads von mingw nix.. wäre cool wenn du eine version online stellst ![]() |
||
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und glaubte im Licht der Straßenlampe Den Geist unseres jahrhunderts auf der Straße zu sehen Der uns sagte, daß wir alle am Rande des Abgrunds stehen. - Al Steward Athlon 64 3000+ / Radeon 9600 / 1024mb ddram |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://prdownloads.sf.net/ming...e?download
Das empfehl ich dir, ist leider etwas gross.. Aber hier nun das kompilierte Modul: http://zehr.de/blitz3d/gamemanager.mod.zip In BlitzMax\mod\pub.mod den Ordner gamemanager.mod erstellen und das Zip da drin entpacken. Sollten zwei .a Dateien sein, Release und Debug. Danach BlitzMax neu starten (falls es geöffnet war) und der Beispielcode von mir sollte sich dann in BlitzMax normal kompilieren lassen. |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, was muss ich jetzt genau machen um Module compilieren zu können? Ich hab mir das runtergeladen, aber ich verstehe den Hinweis den Mark Silby auf der Website hat nicht genau:
Zitat: To enable module development, you must install the Mingw package (main download here), and add the Mingw 'bin' directory to your PATH environment variable. You must also add a MINGW environment variable that contains the base directory of the Mingw installation.
|
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn du MinGW in C:\MinGW installiert hast musst du deine Path Umgebungsvariable anpassen und zusätzlich noch ne neue Umgebungsvariable namens MINGW erstellen.
Dazu klickst du mit rechts auf Arbeitsplatz, dann Eigenschaften auswählen. Dort das Tab Erweitert auswählen und unten den Knopf Umgebungsvariablen klicken. Dort gibts dann 2 Listboxes. In der unteren wo Systemvariablen steht wählst du Path aus und klickst auf Bearbeiten. Dann schreibst du ans Ende ";C:\MinGW\bin" (ohne Anführungszeichen, Semikolon am Anfang ist wichtig). Nun klickst du noch auf Neu. Als Name MINGW eingeben und bei Wert "C:\MinGW" (ohne Anführungszeichen). Jetzt BMax neustarten und die Module sollten sich kompilieren lassen (Build Modules). |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, Danke, funktioniert alles perfekt. Wieder was dazu gelernt ![]() |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group