java在KeyEvent之后发生多个事件。出现了VK_空间
不知道为什么。我的方法运行多次并打印字符串“Fire!!!” 它应该只在事件发生后运行一次
球员级别
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()){
case KeyEvent.VK_SPACE:{
Missilies m = new Missilies(x,y);
//m.fire();
if(!m.isFired()) {
m.fire();
m.setFired(true);
}
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()){
case KeyEvent.VK_SPACE:{
m.setFired(false);
}
导弹级
public void fire(){
System.out.println("Fire !!!");
}
现在这似乎奏效了:
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()){
case KeyEvent.VK_SPACE:{
Missilies m = new Missilies(x,y);
if (lastKey == null || lastKey != e.getKeyChar()) {
lastKey = e.getKeyChar();
m.fire();
System.out.println("keyPressed: " + lastKey);
}
# 1 楼答案
看看this:
keyPressed()
只要按住键,就会持续触发。你可以将代码放入keyReleased()
,但是如果玩家在放开钥匙时发射导弹,玩家可能会感到奇怪。最好是进行某种检查,确保每次事件只触发一次