2016-02-10 2 views
3

J'ai un jeu Java slick2d appelé Je déteste Noël. Le jeu ne me laissera pas passer à l'état suivant. Il dit No game state registered with id of 1. Lorsque je cours le même code exact dans Game.java, ça marche bien. Voici mon code Game.javaÉtat du jeu SLICK2D pas enregistré

package com.hurricane996.IHateChristmas; 

import java.util.logging.Level; 
import java.util.logging.Logger; 

import org.newdawn.slick.AppGameContainer; 
import org.newdawn.slick.GameContainer; 
import org.newdawn.slick.SlickException; 

import org.newdawn.slick.state.GameState; 
import org.newdawn.slick.state.StateBasedGame; 


public class Game extends StateBasedGame{ 
public static String name="I Hate Christmas"; 
public static Game instance=new Game(name); 

public static final int MAIN_MENU=0; 
public static final int GAME=1; 
public Game(String name) { 
    // TODO Auto-generated constructor stub 
    super(name); 
} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    try{ 
     AppGameContainer agc=new AppGameContainer(new Game("Simple Slick Game")); 
     agc.setDisplayMode(640, 480, false); 
     agc.setShowFPS(false); 
     agc.start(); 
    }catch(Exception e){ 
     Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, e); 
    } 

} 






@Override 
public void initStatesList(GameContainer arg0) throws SlickException { 
    // TODO Auto-generated method stub 
    this.addState((GameState) new MainMenu()); 
    this.addState((GameState) new GameScreen()); 
    this.enterState(GAME); 
    this.enterState(MAIN_MENU); 
} 

} 

MainMenu.java

package com.hurricane996.IHateChristmas; 

import java.awt.Font; 

import org.newdawn.slick.Color; 
import org.newdawn.slick.GameContainer; 
import org.newdawn.slick.Graphics; 
import org.newdawn.slick.Input; 
import org.newdawn.slick.SlickException; 
import org.newdawn.slick.TrueTypeFont; 
import org.newdawn.slick.geom.Rectangle; 
import org.newdawn.slick.state.GameState; 
import org.newdawn.slick.state.StateBasedGame; 

public class MainMenu implements GameState { 
Font font = new Font("Verdana", Font.BOLD, 32); 
TrueTypeFont ttf = new TrueTypeFont(font, true); 
public MainMenu() { 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void mouseClicked(int button, int x, int y, int arg3) { 
     Game.instance.enterState(Game.GAME); 


} 

@Override 
public void mouseDragged(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseMoved(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mousePressed(int arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseReleased(int arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseWheelMoved(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void inputEnded() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void inputStarted() { 
    // TODO Auto-generated method stub 

} 

@Override 
public boolean isAcceptingInput() { 
    // TODO Auto-generated method stub 
    return true; 
} 

@Override 
public void setInput(Input arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void keyPressed(int arg0, char arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void keyReleased(int arg0, char arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerButtonPressed(int arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerButtonReleased(int arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerDownPressed(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerDownReleased(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerLeftPressed(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerLeftReleased(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerRightPressed(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerRightReleased(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerUpPressed(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerUpReleased(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void enter(GameContainer arg0, StateBasedGame arg1) throws SlickException { 
    // TODO Auto-generated method stub 

} 

@Override 
public int getID() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException { 
    // TODO Auto-generated method stub 

} 

@Override 
public void leave(GameContainer arg0, StateBasedGame arg1) throws SlickException { 
    // TODO Auto-generated method stub 

} 

@Override 
public void render(GameContainer arg0, StateBasedGame arg1, Graphics g) throws SlickException { 
    // TODO Auto-generated method stub 

    g.setBackground(Color.white); 
    g.setColor(Color.black); 
    Rectangle button=new Rectangle(640/2-20, 480/2-10, 40, 20); 
    g.fill(button); 
    g.draw(button); 

    ttf.drawString(640/2-ttf.getWidth("I hate Christmas")/2,480/3,"I hate Christmas",Color.black); 
    g.setColor(Color.white); 
    g.drawString("Play",640/2-20 ,480/2-10); 


} 

@Override 
public void update(GameContainer arg0, StateBasedGame arg1, int arg2) throws SlickException { 
    // TODO Auto-generated method stub 

} 

} 

GameScreen.java

package com.hurricane996.IHateChristmas; 

import org.newdawn.slick.GameContainer; 
import org.newdawn.slick.Graphics; 
import org.newdawn.slick.Input; 
import org.newdawn.slick.SlickException; 
import org.newdawn.slick.state.GameState; 
import org.newdawn.slick.state.StateBasedGame; 

public class GameScreen implements GameState { 

public GameScreen() { 
    // TODO Auto-generated constructor stub 
} 
@Override 
public void mouseClicked(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseDragged(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseMoved(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mousePressed(int arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseReleased(int arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseWheelMoved(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void inputEnded() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void inputStarted() { 
    // TODO Auto-generated method stub 

} 

@Override 
public boolean isAcceptingInput() { 
    // TODO Auto-generated method stub 
    return true; 
} 

@Override 
public void setInput(Input arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void keyPressed(int arg0, char arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void keyReleased(int arg0, char arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerButtonPressed(int arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerButtonReleased(int arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerDownPressed(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerDownReleased(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerLeftPressed(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerLeftReleased(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerRightPressed(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerRightReleased(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerUpPressed(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void controllerUpReleased(int arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void enter(GameContainer arg0, StateBasedGame arg1) throws SlickException { 
    // TODO Auto-generated method stub 

} 

@Override 
public int getID() { 
    return 1; 
} 

@Override 
public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException { 
    // TODO Auto-generated method stub 

} 

@Override 
public void leave(GameContainer arg0, StateBasedGame arg1) throws SlickException { 
    // TODO Auto-generated method stub 

} 

@Override 
public void render(GameContainer arg0, StateBasedGame arg1, Graphics arg2) throws SlickException { 
    // TODO Auto-generated method stub 

} 

@Override 
public void update(GameContainer arg0, StateBasedGame arg1, int arg2) throws SlickException { 
    // TODO Auto-generated method stub 

} 

} 

Le retraçage:

java.lang.RuntimeException: No game state registered with the ID: 1 
at org.newdawn.slick.state.StateBasedGame.enterState(StateBasedGame.java:153) 
at org.newdawn.slick.state.StateBasedGame.enterState(StateBasedGame.java:131) 
at com.hurricane996.IHateChristmas.MainMenu.mouseClicked(MainMenu.java:21) 
at org.newdawn.slick.state.StateBasedGame.mouseClicked(StateBasedGame.java:488) 
at org.newdawn.slick.Input.fireMouseClicked(Input.java:1526) 
at org.newdawn.slick.Input.considerDoubleClick(Input.java:1111) 
at org.newdawn.slick.Input.poll(Input.java:1233) 
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:641) 
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411) 
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321) 
at com.hurricane996.IHateChristmas.Game.main(Game.java:31) 
+0

L'erreur provient de la méthode MainMenu.mouseClick? – RPresle

+0

Oui, c'est le cas.() –

Répondre

1

Votre instance statique de jeu est pas égal à ce qui est créé dans la méthode principale. Vous créez 2 instances de jeu et essayez d'utiliser celle qui n'a aucun état initialisé.

Vous ne pouvez pas le faire:

public static Game instance = new Game(name); 

et ceci:

AppGameContainer agc = new AppGameContainer(new Game("Simple Slick Game")); 

Pour ce faire, à la place:

AppGameContainer agc = new AppGameContainer(instance); 

Lorsque votre méthode de clic est appelé, il utilise un jeu instance avec aucun état, puisque les états ne sont pas initialisés dans la création de l'instance de jeu.