Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

12.10.2014, 18:30

Verschiedene GameStates - LibGDX - Box2D

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 :D

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

12.10.2014, 18:38

Arbeitest du mit libGDXs Screens?
Dein Code ist kaum Aussagekräfig.

Wenn du mit Screens arbeitest musst du diese auch setzten. Siehe GitHub.

3

12.10.2014, 18:51

Bisher nicht. Aber ich versuch's mal. Melde mich gleich nochmal.

4

12.10.2014, 19:24

Okay. Habe den GameStateManager von einem Youtube Tutorial. Ich weiß selbst nicht genau, wieso da was wie ist.
Bin aber jetzt schon dabei es mit Screens zu machen.

Edit: Kriegs nicht richtig hin. Kennt ihr eventuell ein besseres Tutorial zu 2DPlatformern? Also mit TiledMaps und so.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ClashOfClansPhil« (12.10.2014, 19:31)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

Werbeanzeige