Reset in der switch Anweisung

  • Themenstarter Themenstarter fouraces
  • Beginndatum Beginndatum
F

fouraces

Gast
HeyHo, folgendes Problem:

Meine Switch Anweisung sieht folgendermaßen aus:

Java:
   	switch(m_internalState)
	     	{
	     	
	     	
	     	case Menu:
	     	
		     	int xpos = Mouse.getX();
		        int ypos = Mouse.getY();
		        if((xpos>0&&xpos<200) && (ypos>0&&ypos<100))
		        {
		        	
		        	
		        
		            if(input.isMouseButtonDown(0))	         
		            m_internalState = GameState.SimpleGame; 
		          
		            m_gameTime = 0;	
		            
		        }
		        break;
	     	case SimpleGame: 
	     		m_gameTime += delta;
	     		m_player.Update(delta, gc.getInput());
	        	
	        	for(int i = 0; i < m_arrayOfCars.length; ++i)
	        		m_arrayOfCars[i].Update(delta);
	        	
	         	for(int i = 0; i < m_arrayOfCars.length; ++i)
	         		if (m_arrayOfCars[i].GetBoundingRectangle().intersects(m_player.GetBoundingRectangle()))
	         		{ m_internalState = GameState.Score;
	         		   
	         		}
	         	break;
	     	case Score:
                                    /* damit das nicht ausufert spar ich mir den Rest, hier wird die vergangene Game Time angezeigt, und per MouseInput wieder in das Menu geleitet  **/

funktioniert soweit alles wunderbar, nur wird die GameState.SimpleGame nicht zurückgesetzt, das heißt wenn ich vom Score ins Menü gehe und von dort aus wieder ins SimpleGame haben die Autos wieder die position in der ich die State verlassen habe, wie kann ich das verhindern? Bzw.: Wie setzte ich sie wieder auf die start Position?

Zur Erklärung: Ich schreibe ein kleines Spiel mit Java & Slick
Ich wäre dankbar um jede Idee, da ich echt nicht darauf komme und noch ein Frischling bin 🙂

// Sry, falls das keine Anfängerfrage mehr ist oder ich allgemein irgendwie im falschen bin.



Danke für die hilfe 🙂
lg
 
Was für ein Typ ist "m_internalState"?

Vermutlich machst Du folgendes:

Java:
private void gamestate(m_internalState) {
  switch (m_internalState) {
    ... m_internalState = GameState.SimpleGame;
  ..
 }
}

Das Problem ist: du erzeugst ein neues m_internalState und das wird nicht nach "aussen" durchgereicht (also am Ende der Methode wieder verworfen). Entweder als globales Objekt deklarieren oder als Rückgabewert der Methode definieren.

Bernd
 
Java:
public GameState m_internalState = GameState.MenuFrog;

Bei mri sieht das so aus, und switch ist in der Update Methode meines kleinen Spiels, hätt ich vllt dazuerwähnen sollen.

Java:
public GameState m_internalState = GameState.Menu;

Was heißt Gloabal definieren? Bei mir sieht es folgendermaßen aus:

Java:
public class SimpleGame extends BasicGame
{
 
	private enum GameState
	{
		Menu,
		SimpleGame,
		Score
	}
	
	public GameState m_internalState = GameState.MenuFrog;

Dachte eigentlich das wär schon Global.
Ansonsten per return, wie soll ich das anstellen? Ich weiß das return etwas zurückgibt etc. aber inwiefern beeinflusst das hier meine Update Methode, diese soll doch jedes mal "frisch" starten.
 
[...] nur wird die GameState.SimpleGame nicht zurückgesetzt, das heißt wenn ich vom Score ins Menü gehe und von dort aus wieder ins SimpleGame haben die Autos wieder die position in der ich die State verlassen habe
Naja, an welcher Stelle des Programms setzt du die Autos denn wieder auf ihre Startpositionen? Von alleine machen die das nicht. Du müsstest dir schon selber soetwas wie eine Reset-Methode schreiben um diese dann in der switch-Anweisung aufzurufen.
 

Zurück
Oben