Hauptmenü -> Ingame - Optimaler Weg?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Stephan87

Betreff: Hauptmenü -> Ingame - Optimaler Weg?

BeitragSo, Mai 20, 2007 10:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 20, 2007 10:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 20, 2007 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt, daran hatte ich gar nicht gedacht. vielen dank Smile

skey-z

BeitragSo, Mai 20, 2007 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter

Suco-X

Betreff: .....

BeitragSo, Mai 20, 2007 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 25, 2007 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank werde mir das mal genauer anschauen

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group