Hallo,
ich arbeite aktuell an einem 2d Platformer in Java mit LibGDX & Box2D.
Ich habe einen GameStateManager, der zuerst das Menü zeigen soll. Dies tut er auch & es funktioniert.
Im Menü gibt es einen Button, der das Spiel beginnt. Der GameState wird auf Play gesetzt & es wird das eigentliche Spiel gezeigt.
Mein Problem:
Wenn ich, z.B. wenn der Spieler am Ende ist, wieder das Menü aufrufen möchte, wird dort nichts angezeigt.
Ich hab keine Ahnung wieso & deshalb frage ich euch.
Ich will jetzt nicht mega viel Code schicken, darum versuche ich, dass wichtigste rauszusuchen.
Erstmal meine Game-Klasse, welche beim Start des Programms ausgeführt wird:
(nur meiner Meinung nach relevante Stelllen)
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
...
private GameStateManager gsm;
public static final float STEP = 1/ 60f;
private float accum;
...
public void create() {
...
gsm = new GameStateManager(this);
...
}
...
public void render() {
accum += Gdx.graphics.getDeltaTime();
while(accum >= STEP) {
accum -= STEP;
gsm.update(STEP);
gsm.render();
MyInput.update(); // <-- das ist mein InputProcessor
}
}
...
|
So dann wichtige Stellen des GameStateManagers:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
...
private Game game;
private Stack<GameState> gameStates;
public static final int PLAY = 912837;
public static final int BOX2DMENU = 111111;
public GameStateManager(Game game) {
this.game = game;
gameStates = new Stack<GameState>();
pushState(BOX2DMENU);
}
...
private GameState getState(int state) {
if(state == PLAY) return new Play(this);
if(state == BOX2DMENU) return new Box2DMenu(this);
return null;
}
public void setState(int state) {
popState();
pushState(state);
}
public void pushState(int state) {
gameStates.push(getState(state));
}
public void popState() {
GameState g = gameStates.pop();
g.dispose();
}
...
|
Dann noch ein wenig aus der GameState Klasse:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
...
protected GameStateManager gsm;
protected Game game;
protected SpriteBatch sb;
protected OrthographicCamera cam;
protected OrthographicCamera hudCam;
protected GameState(GameStateManager gsm) {
this.gsm = gsm;
game = gsm.game();
sb = game.getSpriteBatch();
cam = game.getCamera();
hudCam = game.getHUDCamera();
}
...
|
Dann noch die Stelle in meiner Klasse Play, wo dann wieder das Menü gezeigt werden soll:
|
Quellcode
|
1
2
3
|
...
gsm.setState(GameStateManager.BOX2DMENU);
...
|
Und zu guter letzt noch die Menü Klasse:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
...
Texture tex;
...
public Menu(GameStateManager gsm) {
super(gsm);
tex = Game.res.getTexture("play_button");
}
...
public void render() {
sb.begin();
sb.draw(tex, x, y);
sb.end();
}
...
|
Ich hoffe, irgendwer kann mit dem ganzen Code was anfangen & mir helfen. Hab selbst schon alles versucht, was ich kann (bin noch Anfänger).
Danke schonmal