Java 二维状态转换错误
我按照教程制作了我的第一个slick2d游戏,不幸的是,从游戏场状态过渡到菜单状态时出现了一个问题。 我尝试了很多方法,但没有发现问题所在 这是主要课程(游戏) 菜单课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
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);
}
}
}