【发布时间】:2021-02-17 21:34:02
【问题描述】:
我目前正在通过斯坦福的 Programming Methodology (2008) 课程学习 Java。我正在尝试创建游戏 Breakout 并尝试为桨设置动画,这是一个 GRect 类型的对象。这是我的代码:
// moves paddle via keyboard
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_RIGHT && paddle.getX() < getWidth() - paddle.getWidth()) {
paddle.move(5, 0);
}
if (key == KeyEvent.VK_LEFT && paddle.getX() > 0) {
paddle.move(-5, 0);
}
}
//moves paddle via mouse
public void mouseMoved(MouseEvent e) {
while (e.getX() > paddle.getX() + PADDLE_WIDTH/2 && paddle.getX() < getWidth() - PADDLE_WIDTH) {
paddle.move(1, 0);
}
while (e.getX() < paddle.getX() + PADDLE_WIDTH/2 && paddle.getX() > 0) {
paddle.move(-1, 0);
}
问题是,如果我用鼠标移动桨,它会很好地跟随,它比我尝试用键盘移动它要顺畅得多。更改 move() 方法中的值只会改变桨移动的速度。
我尝试过谷歌搜索,人们所做的其中一件事是逐渐增加和减少桨的移动速度,但我不确定如何通过这个库正确实现。这是我的尝试:
private double acceleration(double finalSpeed) {
if (finalSpeed > initialSpeed) {
initialSpeed += delta;
} else if (finalSpeed < initialSpeed) {
initialSpeed -= delta;
}
return initialSpeed;
}
private double initialSpeed = 0;
private double delta = 0.5;
在此之后,我只设置了 paddle.move(acceleration(5),0) 而不是 paddle.move (5,0)。而且我还添加了将速度设置为初始值的 KeyReleased 方法:
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_RIGHT || key == KeyEvent.VK_LEFT) {
initialSpeed = 0;
}
但是,当我在左右箭头键之间切换时,拨片的移动没有响应。开始向另一个方向移动大约有 0.5 秒的延迟,我花了一整天的时间试图找出解决方案,但无济于事。请给我任何提示,谢谢!
【问题讨论】:
标签: java animation keylistener keyevent breakout