Java 二维状态转换错误

Java 二维状态转换错误,java,state,slick2d,2d-games,Java,State,Slick2d,2d Games,我按照教程制作了我的第一个slick2d游戏,不幸的是,从游戏场状态过渡到菜单状态时出现了一个问题。 我尝试了很多方法,但没有发现问题所在 这是主要课程(游戏) 菜单课 package javagame; import org.lwjgl.input.Mouse; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Image; import org

我按照教程制作了我的第一个slick2d游戏,不幸的是,从游戏场状态过渡到菜单状态时出现了一个问题。 我尝试了很多方法,但没有发现问题所在

这是主要课程(游戏)

菜单课

package javagame;
import org.lwjgl.input.Mouse;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.*;


public class Menu extends BasicGameState implements GameState {
private int state;
Image playNow;
Image exitGame;

public Menu(int menu) {
    // TODO Auto-generated constructor stub

}

public void init(GameContainer arg0, StateBasedGame arg1)
        throws SlickException { 


}




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

    playNow = new Image("res/playNow.png");
    exitGame=new Image("res/exitGame.png");

    g.drawString("Welcome to BuckyLand", 100, 50);
    g.drawImage(playNow, 100, 100);
    g.drawImage(exitGame, 100, 200);





}


public void update(GameContainer gc, StateBasedGame sbg, int arg2)
        throws SlickException {
int posX = Mouse.getX();
int posY = Mouse.getY();
if (posX > 100 && posX < 100+playNow.getWidth() && posY > 209 &&posY<260)
{
    if (Mouse.isButtonDown(0)) {
        sbg.enterState(1);
    }

}

if (posX > 100 && posX < 100+playNow.getWidth() && posY > 109 &&posY<160)
{
    if (Mouse.isButtonDown(0)) {
        System.exit(0);
    }

}
}



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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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



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

}
}
包javagame;
导入org.lwjgl.input.Mouse;
导入org.newdawn.slick.GameContainer;
导入org.newdawn.slick.Graphics;
导入org.newdawn.slick.Image;
导入org.newdawn.slick.Input;
导入org.newdawn.slick.SlickException;
导入org.newdawn.slick.state.*;
公共类菜单扩展BasicGameState实现游戏状态{
私人和国家;
图像播放现在;
图像出口;
公共菜单(int菜单){
//TODO自动生成的构造函数存根
}
public void init(游戏容器arg0,StateBasedGame arg1)
抛出异常{
}
公共void呈现(GameContainer arg0、StateBasedGame arg1、Graphics g)
抛出异常{
//TODO自动生成的方法存根
playNow=新图像(“res/playNow.png”);
exitGame=新图像(“res/exitGame.png”);
g、 抽绳(“欢迎来到巴克兰”,100,50);
g、 drawImage(playNow,100100);
g、 drawImage(ExitName,100200);
}
公共无效更新(GameContainer gc、StateBasedGame sbg、int arg2)
抛出异常{
int posX=Mouse.getX();
int posY=Mouse.getY();
如果(posX>100&&posX<100+playNow.getWidth()&&posY>209&&posY 100&&posX<100+playNow.getWidth()&&posY>109&&posY 162)
buckyPosY-=δ*0.1f;
}
if(input.isKeyDown(input.KEY_DOWN))
{bucky=向下移动;
buckyPosY-=δ*0.1f;
if(buckyPosY 324)
buckyPosX-=δ*0.1f;
}
if(input.isKeyDown(input.KEY_RIGHT))
{bucky=movingRight;
buckyPosX-=δ*0.1f;
如果(buckyPosX<-840)
buckyPosX+=δ*0.1f;
}}
if(input.isKeyDown(input.KEY_ESCAPE))
退出=真;
如果(退出)
{
if(input.isKeyDown(input.KEY_R))
退出=错误;
if(input.isKeyDown(input.KEY_M))
sbg.企业(1);
if(input.isKeyDown(input.KEY_M))
系统出口(0);
}
}
}

非常感谢

您正在播放状态中切换到播放状态。在Play类中,放置,
sbg.enterState(0)
而不是
sbg.enterState(1)

BasicGameState
已经实现时,为什么要扩展
BasicGameState
并实现
GameState
。谢谢你,这只是为了找出问题而不顾一切的尝试。我想知道是移动到状态0还是任何转换的问题。通过这种方式,它应该保持相同的状态,而不是编译器终止。这将有助于确定问题的起因。
package javagame;
import org.lwjgl.input.Mouse;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.*;


public class Menu extends BasicGameState implements GameState {
private int state;
Image playNow;
Image exitGame;

public Menu(int menu) {
    // TODO Auto-generated constructor stub

}

public void init(GameContainer arg0, StateBasedGame arg1)
        throws SlickException { 


}




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

    playNow = new Image("res/playNow.png");
    exitGame=new Image("res/exitGame.png");

    g.drawString("Welcome to BuckyLand", 100, 50);
    g.drawImage(playNow, 100, 100);
    g.drawImage(exitGame, 100, 200);





}


public void update(GameContainer gc, StateBasedGame sbg, int arg2)
        throws SlickException {
int posX = Mouse.getX();
int posY = Mouse.getY();
if (posX > 100 && posX < 100+playNow.getWidth() && posY > 209 &&posY<260)
{
    if (Mouse.isButtonDown(0)) {
        sbg.enterState(1);
    }

}

if (posX > 100 && posX < 100+playNow.getWidth() && posY > 109 &&posY<160)
{
    if (Mouse.isButtonDown(0)) {
        System.exit(0);
    }

}
}



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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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



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

}
}
package javagame;

import org.newdawn.slick.Animation;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.*;

public class Play extends BasicGameState {
Animation bucky,movingUp,movingDown,movingLeft,movingRight;
Image worldMap;
boolean quit = false;
int[] duration={200,200};
float buckyPosX = 0;
float buckyPosY = 0;
float shiftX = buckyPosX + 320;
float shiftY = buckyPosY + 160;


public Play(int play) {
    // TODO Auto-generated constructor stub

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

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

}

public int getID() {
    // TODO Auto-generated method stub

    return 1;
}

public void init(GameContainer arg0, StateBasedGame sbg)
        throws SlickException {
    // TODO Auto-generated method stub
    worldMap = new Image("res/world.png");
    Image[] walkUp = {new Image("/res/buckysBack.png"),new                                                                         
             Image("res/buckysBack.png")};
    Image[] walkDown = {new Image("/res/buckysFront.png"),new   
            Image("res/buckysFront.png")};
    Image[] walkLeft = {new Image("/res/buckysLeft.png"),new 
            Image("res/buckysLeft.png")}; 
    Image[] walkRight = {new Image("/res/buckysRight.png"),new          
            Image("res/buckysRight.png")};
    movingUp = new Animation(walkUp,duration,false);
    movingDown = new Animation(walkDown,duration,false);
    movingLeft = new Animation(walkLeft,duration,false);
    movingRight = new Animation(walkRight,duration,false);
    bucky = movingDown;




}

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

}

public void render(GameContainer arg0, StateBasedGame arg1, Graphics g)
        throws SlickException {
    // TODO Auto-generated method stub
    worldMap.draw(buckyPosX,buckyPosY);
    bucky.draw(shiftX, shiftY);
    g.drawString("Bucky Xpos = "+buckyPosX+"\nBucky YPos = "+buckyPosY,400,20);
    if(quit)
    {
        g.drawString("Resume(R)\nMenu(M)\nExit(Q)", 150, 200);
        if(!quit) g.clear();
    }
}

public void update(GameContainer gc, StateBasedGame sbg, int delta)
        throws SlickException {
    // TODO Auto-generated method stub
    Input input = gc.getInput();
    if(!quit)
    {
    if(input.isKeyDown(Input.KEY_UP))
    {   bucky = movingUp;
    buckyPosY += delta * 0.1f;
    if(buckyPosY > 162)
        buckyPosY -= delta * 0.1f;

    }
    if(input.isKeyDown(Input.KEY_DOWN))
    {   bucky = movingDown;
    buckyPosY -= delta * 0.1f;
    if(buckyPosY <- 600)
        buckyPosY += delta * 0.1f;  

    }   
    if(input.isKeyDown(Input.KEY_LEFT))
    {   bucky = movingLeft;
    buckyPosX += delta * 0.1f;
    if(buckyPosX > 324)
        buckyPosX -= delta * 0.1f;
    }
    if(input.isKeyDown(Input.KEY_RIGHT))
    {   bucky = movingRight;
    buckyPosX -= delta * 0.1f;
    if(buckyPosX < -840)
        buckyPosX += delta * 0.1f;
    }}

    if(input.isKeyDown(Input.KEY_ESCAPE))
        quit = true;
    if(quit)
    {
        if(input.isKeyDown(Input.KEY_R))
            quit = false;
        if(input.isKeyDown(Input.KEY_M))
         sbg.enterState(1);
        if(input.isKeyDown(Input.KEY_M))
             System.exit(0);

    }


}

}