Hauptmenü -> Ingame - Optimaler Weg?
Übersicht

![]() |
Stephan87Betreff: Hauptmenü -> Ingame - Optimaler Weg? |
![]() Antworten mit Zitat ![]() |
---|---|---|
guten tag!
ich habe eine frage zu der generellen struktur von einem spiel, welches aus einem hauptmenü und dem "kern" des spiels besteht. bisher hatte ich folgenden aufbau: function hauptmenü() _____schleife __________rufe funktion ingame auf _____schleife ende end function function ingame() ______schleife _________rufe funktion hautpmenü auf ______schleife ende end function leider erscheint mir das nicht gerade der beste weg zu sein (oder?). wäre folgendes besser?: schleife _____prüfe ob gerade ingame ____________ingame _____ansonsten ____________hauptmenü schleife ende ist das zweite modell schneller?, ressourcenfreundlicher? oder tut sich da überhaupt nichts? schöne grüße, stephan87 |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das erste model hat das Problem der Variablen Separation, was soviel heisst wie: du müsstest bedeutend mehr globale Variablen haben wenn man das hauptmenü auch im pause modus zb hätte. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Stephan87 |
![]() Antworten mit Zitat ![]() |
---|---|---|
stimmt, daran hatte ich gar nicht gedacht. vielen dank ![]() |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
such mal im Codearchiv nach schleife und als autor suco-x(erweiterte suche), das wird dir wahrscheinlich sehr helfen | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe mal ein Tutorial über OO Spielverwaltung gelesen und für BlitzMax aufbereitet. Vielleicht hilft es dir ja, ist etwas komplexer aber schön zu benutzen denke ich:
Code: [AUSKLAPPEN] Strict Type TGameManager Field CurrentState:TGameState Field Active:Int = True Field SavedStates:TList Method New() Active = True SavedStates = New TList End Method Method Flush() FlushKeys() FlushMouse() End Method Method SaveState(NextState:TGameState) If CurrentState CurrentState.Pause() SavedStates.AddLast(CurrentState) EndIf Flush() CurrentState = NextState If Not CurrentState Quit() Return EndIf CurrentState.Manager = Self CurrentState.Start() End Method Method LoadState() If CurrentState CurrentState.Quit() EndIf Flush() If Not SavedStates.Count() Quit() Return EndIf CurrentState = TGameState(SavedStates.Last()) CurrentState.Resume() End Method Method ChangeState(State:TGameState) If CurrentState CurrentState.Quit() EndIf Flush() CurrentState = State If Not CurrentState Quit() Return EndIf CurrentState.Manager = Self CurrentState.Start() End Method Method Update() If CurrentState CurrentState.Update() EndIf End Method Method Draw() If CurrentState CurrentState.Draw() EndIf End Method Method HandleEvents() If CurrentState CurrentState.HandleEvents() EndIf End Method Method Running() Return Active End Method Method Quit() If CurrentState CurrentState.Quit() EndIf Active = False End Method End Type Type TGameState Field Manager:TGameManager Method Start() Abstract Method Quit() Abstract Method Pause() Abstract Method Resume() Abstract Method HandleEvents() Abstract Method Update() Abstract Method Draw() Abstract End Type Type TMenuState Extends TGameState Method Start() Print "Menustate gestartet" End Method Method Quit() Print "Menustate verlassen" End Method Method Pause() Print "Menustate pausiert" End Method Method Resume() Print "Menustate entpausiert" End Method Method HandleEvents() If KeyHit(KEY_ESCAPE) End EndIf If KeyHit(KEY_SPACE) Manager.SaveState(New TMainState) EndIf End Method Method Update() End Method Method Draw() SetRotation 0.0 SetHandle 0.0, 0.0 SetScale 2.0, 2.0 DrawText "Hier ist das Menue. Space druecken", GraphicsWidth()*0.15, GraphicsHeight()*0.15 End Method End Type Type TMainState Extends TGameState Field Rotation:Float Field Text:String Method Start() text = "Das Spiel. Escape druecken" Print "Mainstate gestartet" End Method Method Quit() Print "Mainstate verlassen" End Method Method Pause() End Method Method Resume() End Method Method HandleEvents() If KeyHit(KEY_ESCAPE) Manager.LoadState() EndIf End Method Method Update() Rotation:+1.0 End Method Method Draw() SetScale 2.0, 2.0 SetRotation Rotation SetHandle TextWidth(Text)*0.5, TextHeight(Text)*0.5 DrawText Text, GraphicsWidth()*0.5, GraphicsHeight()*0.5 End Method End Type Graphics 800,600,0 Local Manager:TGameManager = New TGameManager Manager.ChangeState(New TMenuState) While Manager.Running() Cls Manager.HandleEvents() Manager.Update() Manager.Draw() Flip Wend Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Stephan87 |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielen dank werde mir das mal genauer anschauen | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group