我正在用Java做作业,这是一款游戏。我想让用户选择暂停游戏。我试图做的是使用KeyListeners。所以,在keyPressed游戏停止。
现在如何使用相同的按钮重新开始游戏。
这是我的代码:
public void keyPressed(KeyEvent evt) {
int key = evt.getKeyCode();
if ( key == KeyEvent.VK_SPACE){
dog.setSpeed(0);
ball.setXspeed(0);
ball.setYspeed(0);
}
所以对象正在移动,当我按空格键时,它们都会停止。 (很好) 但是,当我再次按空间时,即使我给他们新的速度值,他们也不会开始。
if ( key == KeyEvent.VK_SPACE){
dog.setSpeed(dogSpeed);
ball.setXspeed(xBallSpeed);
ball.setYspeed(yBallSpeed);
}
任何人都知道如何在Java中停止和启动某些事件?
答案 0 :(得分:3)
这不是解决问题的好方法。暂停应该停止游戏逻辑更新,而不是更改其值以“模拟”暂停状态。
我的意思是你应该有以下内容:
void updateLogic() {
if (!isPaused) {
for (each entity) {
update position according to speed
}
}
}
void keyPressed(KeyEvent evt) {
int key = evt.getKeyCode();
if (key == KeyEvent.VK_SPACE) {
isPaused = !isPaused;
}
}
答案 1 :(得分:2)
public boolean isPlaying = true;
if ( key == KeyEvent.VK_SPACE){
if(!isPlaying) {
dog.setSpeed(dogSpeed);
ball.setXspeed(xBallSpeed);
ball.setYspeed(yBallSpeed);
isPlaying = true;
}
else {
dog.setSpeed(0);
ball.setXspeed(0);
ball.setYspeed(0);
isPlaying = false;
}
}
答案 2 :(得分:0)
这两种方法都有效。将速度设置为零并停止更新。
然而,我找到了另一个更好的解
在我的程序中,我有一个计时器:
timer = new Timer(t, new GameMotion());
timer.start();
所以当我按空格键时,我就开始停止计时器。您可以看到旧代码已注释掉。两种方式都有效。
谢谢你们。我感谢你的帮助。
if (isPlaying == true) {
if (key == KeyEvent.VK_LEFT) {
dog.setSpeed(-dogSpeed);
}
if (key == KeyEvent.VK_RIGHT) {
dog.setSpeed(dogSpeed);
}
//xBallSpeed = ball.getXballSpeed();
//yBallSpeed = ball.getYballSpeed();
}
if (key == KeyEvent.VK_SPACE ){
isPlaying = !isPlaying;
}
if (key == KeyEvent.VK_SPACE && !isPlaying) {
timer.stop();
//ball.setXspeed(0);
//ball.setYspeed(0);
}
else if (key == KeyEvent.VK_SPACE && isPlaying ){
//ball.setXspeed(xBallSpeed);
//ball.setYspeed(yBallSpeed);
timer.start();
}
`