when ever my player dies, he will be sent to the Menu State and when he plays again, he can start from the same place where he left off which results in an endless death. what I want is that when my game shows the Menu State, the game always resets.
How do I do that?
My Game Class
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
public class Game implements Runnable {
private Display display;
private int width,
height;
public String title;
private boolean running = false;
private Thread thread;
private BufferStrategy bs;
private Graphics g;
//States
public State gameState;
public MenuState menuState;
public SplashScreen splashscreen;
//Input
private KeyManager keyManager;
private MouseManager mouseManager;
//Camera
private GameCamera gameCamera;
//Handler
private Handler handler;
public Game(String title, int width, int height){
this.width = width;
this.height = height;
this.title = title;
keyManager = new KeyManager();
mouseManager = new MouseManager();
}
//HERE IS MY INIT() METHOD
private void init(){
display = new Display(title, width, height);
display.getFrame().addKeyListener(keyManager);
display.getFrame().addMouseListener(mouseManager);
display.getFrame().addMouseMotionListener(mouseManager);
display.getCanvas().addMouseListener(mouseManager);
display.getCanvas().addMouseMotionListener(mouseManager);
Assets.init();
handler = new Handler(this);
gameCamera = new GameCamera(handler, 0, 0);
gameState = new GameState(handler);
menuState = new MenuState(handler);
splashscreen = new SplashScreen(handler);
State.setState(splashscreen);
}
private void tick(){
keyManager.tick();
if(State.getState() != null);
State.getState().tick();
}
private void render(){
bs = display.getCanvas().getBufferStrategy();
if(bs == null){
display.getCanvas().createBufferStrategy(3);
return;
}
g = bs.getDrawGraphics();
//Clear Screen
g.clearRect(0, 0, width, height);
//Draw Here!
if(State.getState() != null);
State.getState().render(g);
//End Drawing!
bs.show();
g.dispose();
}
public void run(){
init();
int fps = 1000;
double timePerTick = 1000000000 / fps;
double delta = 0;
long now;
long lastTime = System.nanoTime();
long timer = 0;
int ticks = 0;
while(running){
now = System.nanoTime();
delta += (now - lastTime) / timePerTick;
timer += now - lastTime;
lastTime = now;
if(delta >= 1){
tick();
render();
ticks++;
delta--;
}
if(timer >= 1000000000){
System.out.println("Ticks and Frames: " + ticks);
ticks = 0;
timer = 0;
}
}
stop();
}
public KeyManager getKeyManager(){
return keyManager;
}
public MouseManager getMouseManager(){
return mouseManager;
}
public GameCamera getGameCamera(){
return gameCamera;
}
public int getWidth(){
return width;
}
public int getHeight(){
return height;
}
public synchronized void start(){
if(running)
return;
running = true;
thread = new Thread(this);
thread.start();
}
public synchronized void stop(){
if(!running)
return;
running = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
My GameState
import java.awt.Graphics;
public class GameState extends State {
private Player player;
private World world;
public GameState(Handler handler){
super(handler);
world = new World(handler, "res/worlds/world1.txt");
handler.setWorld(world);
player = new Player(handler, 200, 200);
}
@Override
public void tick() {
world.tick();
player.tick();
if(handler.getMouseManager().isRightPressed())
System.exit(0);
}
@Override
public void render(Graphics g) {
world.render(g);
player.render(g);
}
}