如何有效地切换状态?每当我按下重放按钮时,两个状态交替显示(赢和播放)。我相信这是一个无限循环,但Eclipse不会打印任何错误。
当我尝试this时,结果为null。因此,结束游戏。 可以this成为答案吗?但我不明白他的更新()。究竟要放什么?会覆盖州级的更新吗?
这是我的代码: stateID(2)是Wins.java
PlayGround.java
public static boolean bouncy = true;
public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{
//if the user is successful, show winner state
if(!bouncy){
sbg.enterState(2);
}
//moves the image randomly in the screen
new Timer(10,new ActionListener(){
public void actionPerformed(ActionEvent e)
{
posX = (r.nextInt(TestProject4.appGC.getWidth()-75));
posY = (r.nextInt(TestProject4.appGC.getHeight()-75));
}
}).start();
}
public void mousePressed(int button,int x,int y){
//if the user pressed the mouse button And
//if the user's coordinates is inside the hit area(rect)
if((button == 0) && (rect.contains(x, y))){
Toolkit.getDefaultToolkit().beep();
bouncy = false;
}
}
Wins.java
@Override
public void update(GameContainer gc, StateBasedGame sbg, int delta)throws SlickException {
//replay game
if(backToGame == true){
sbg.enterState(state);
}
}
public void mousePressed(int button,int x,int y){
//if the user clicks the replay button
if(button == 0){
if((x>160 && x<260)&&(y>280 && y<320)){
if(Mouse.isButtonDown(0)){
backToGame = true;
state = 1;
}
}
//exit button
if((x>=360 && x<460)&&(y>280 && y<320)){
if(Mouse.isButtonDown(0)){
System.exit(0);
}
}
}
}
答案 0 :(得分:2)
我认为你一次又一次地在两个状态之间切换,因为当你切换回时,两个GameState对象仍然处于相同的“状态”(变量仍具有相同的值)。
尝试:
if(!bouncy){
bouncy = true; // next time we are in this game state it will not trigger immediately
sbg.enterState(2);
}
if(backToGame == true){
backToGame = false; // same here
sbg.enterState(state);
}
上一个回答:
请检查您的if语句:
if((x>160 && x<180)||(y>280 && y<320)){
您正在检查鼠标是否在某些 x 坐标OR
某些 y 坐标之间。
我想你想检查鼠标是否在某些 x AND
某些 y 坐标之间:
if((x>160 && x<180)&&(y>280 && y<320)){
答案 1 :(得分:0)
您的代码在PlayGround.java中有两个方法mousePressed(),另一个在Wins.java中。 该应用程序显然使用Playground.java代码。
将按钮检测代码添加到PlayGround.java可能会解决问题。
另外明智地从PlayGround.java中在Wins中显式调用mousePressed()方法 也可以。
添加评论帮助。 它可以显示您对项目的思路,帮助其他人尝试看看您在做什么。 在充实复杂的方法时,我首先过度评论,通过迭代的调试和代码审查来清除明显的注释。 当其他人查看您的代码时,我也会帮助您。 记住没有愚蠢的评论,只有愚蠢的人。