gpt4 book ai didi

java - 未检测到按下两个箭头 - java swing

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:59 28 4
gpt4 key购买 nike

我有一个问题。我实现了一些简单的函数,按下箭头时会调用这些函数。

    public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT)
{

double t = p.getAngle();
if(p.getIsTurning())
t+=3;
else
t+=6;
p.setAngle(t);
p.setIsTurinig(true);

}
else if(key == KeyEvent.VK_UP)
{
p.setVelX(p.getVelX()+p.getAcceleration());
p.setIsAccelerating(true);
}
}

当我按向上箭头然后向左时,一切正常。但是,当我按向左箭头,然后按向上箭头时,仅检测到向上箭头功能。

什么可能导致问题?

最佳答案

if 都不会真正检测到同时按下向左键和向上箭头键。该事件将仅返回最后按下的键。即使您按下向上箭头,然后按下向左箭头键,您真正检测到的只是向左箭头键。您很可能按下向下和向左箭头键,并且会触发相同的 IF 条件。

检测是否同时按下多个键的一种方法是创建 boolean 标志来指示哪些所需的键被按下,哪些没有按下,但您还需要利用 KeyReleased 事件,以便在释放特定键时伪造必要的标志。 boolean 标志对于键盘事件应该是全局的,例如:

boolean keyOne = false;    // flag for LEFT Arrow key
boolean keyTwo = false; // flag for UP Arrow key

public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT) { keyOne = true; }
else if(key == KeyEvent.VK_UP) { keyTwo = true; }

if (keyOne && !keyTwo) {
System.out.println("Only the LEFT Arrow key is pressed!");
}
else if (!keyOne && keyTwo) {
System.out.println("Only the UP Arrow key is pressed!");
}
else if (keyOne && keyTwo) {
System.out.println("Both LEFT Arrow and UP Arrow keys are pressed!);
}
}

public void keyReleaseded(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT) { keyOne = false; }
else if(key == KeyEvent.VK_UP) { keyTwo = false; }
}

至少有这样的效果......

将所需的代码放入 (keyOne && keyTwo) if 条件中。

关于java - 未检测到按下两个箭头 - java swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40050673/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com