Java 游戏状态未注册
我有一个叫做“我讨厌圣诞节”的游戏。游戏不会让我过渡到下一个状态。它说Java 游戏状态未注册,java,slick2d,Java,Slick2d,我有一个叫做“我讨厌圣诞节”的游戏。游戏不会让我过渡到下一个状态。它说没有注册id为1的游戏状态。当我在game.java中运行相同的代码时,它工作正常。这是我的密码 Game.java package com.hurricane996.IHateChristmas; import java.util.logging.Level; import java.util.logging.Logger; import org.newdawn.slick.AppGameContainer; impor
没有注册id为1的游戏状态。
当我在game.java中运行相同的代码时,它工作正常。这是我的密码
Game.java
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
}
}
回溯:
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)
您的静态游戏实例不等于在main方法中创建的实例。创建2个游戏实例,并尝试使用未初始化状态的实例 你不能这样做:
public static Game instance = new Game(name);
这是:
AppGameContainer agc = new AppGameContainer(new Game("Simple Slick Game"));
改为这样做:
AppGameContainer agc = new AppGameContainer(instance);
当调用click方法时,它使用一个没有状态的游戏实例,因为在创建游戏实例时状态没有初始化。错误来自MainMenu。mouseClick方法?