0

释放空格键后,我试图让一个物体继续向下移动。它最初开始向下移动,但在我按下并释放空格键后,对象就停留在原地。释放 KeyEvent 后,我​​似乎无法让对象继续下降。

public class htestnew extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5, this);
int x = 20, y = 20, vely =1;


public htestnew() {
 t.start();
 addKeyListener(this);
 setFocusable(true);
 setFocusTraversalKeysEnabled(false);
}


public void actionPerformed(ActionEvent e) {

if(y < 0)
{
 vely=0;
 y = 0;  
}

if(y > 305) //-70
{
 vely=0;
 y = 305;  
}

y += vely;
repaint();
}

public void keyPressed(KeyEvent e) {
 int code = e.getKeyCode();

  if (code == KeyEvent.VK_SPACE){
  vely = -1;
  }

}


public void keyTyped(KeyEvent e) {}

public void keyReleased(KeyEvent e) {
 vely=0;
}


}
4

1 回答 1

2

释放 KeyEvent 后,我​​似乎无法让对象继续下降。

如果您希望动画在您释放按键后继续发生,那么您需要使用 Swing Timer。按下该键时,您启动定时器,定时器将继续生成事件,直到您停止定时器。使用这种方法不需要处理释放的事件。

您可以将速度设置为 -1 并启动计时器。然后当对象到达底部时,您将停止计时器。

所以基本上 ActionListener 将用作 Timer 的 ActionListener。您只需要添加代码来停止计时器。请注意,当您使用 Timer 时,ActionEvent 的源对象是 Timer,因此您可以从 ActionEvent 中获取对 Timer 的引用。

阅读 Swing 教程中有关使用计时器的部分以获取更多信息。

于 2016-01-31T01:46:58.593 回答