(80分跪求解答)分析下这段代码,8个方向的键盘监听器

aipb2008 aipb2008 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

//add keyboard listener
addKeyListener(new KeyAdapter(){
boolean bUp = false;
boolean bDown = false;
boolean bLeft = false;
boolean bRight = false;

public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
{
if (keyCode == KeyEvent.VK_UP)
bUp = true;
else if (keyCode == KeyEvent.VK_DOWN)
bDown = true;
else if (keyCode == KeyEvent.VK_LEFT)
bLeft = true;
else if (keyCode == KeyEvent.VK_RIGHT)
bRight = true;
}
{
if (bLeft && bUp)
moveBall(-STEP_LEN,-STEP_LEN);
else if (bLeft && bDown)
moveBall(-STEP_LEN,+STEP_LEN);
else if (bRight && bDown)
moveBall(+STEP_LEN,+STEP_LEN);
else if (bRight && bUp)
moveBall(+STEP_LEN,-STEP_LEN);
else if (keyCode == KeyEvent.VK_UP)
moveBall(0,-STEP_LEN);
else if (keyCode == KeyEvent.VK_DOWN)
moveBall(0,STEP_LEN);
else if (keyCode == KeyEvent.VK_LEFT)
moveBall(-STEP_LEN,0);
else if (keyCode == KeyEvent.VK_RIGHT)
moveBall(STEP_LEN,0);
}
}

public void keyReleased(KeyEvent e){
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_UP)
bUp = false;
else if (keyCode == KeyEvent.VK_DOWN)
bDown = false;
else if (keyCode == KeyEvent.VK_LEFT)
bLeft = false;
else if (keyCode == KeyEvent.VK_RIGHT)
bRight = false;
}
});
setFocusable(true);
}


这是在JPanel里的代码,大家不用管moveBall函数,就是移动物体。

8个方向,上下左右,还有斜45度方向。

问题:
按键及释放顺序如果为 按12放12 响应正常,如果为 按12放21 响应会丢失1
举例:按RIGHT:右移
按DOWN :右下移
放RIGHT:下移
放DOWN :停

按RIGHT:右移
按DOWN :右下移
放DOWN :停 //我想要 右移 代码不知哪里有逻辑错误,帮忙分析并改正下
放RIGHT:停

问题补充:
这样设计键盘响应,当按一个键不放时,才按下总不能“很快”的响应,有点停滞然后在不断移动,可以改进吗?
同样的问题发生在按下A,释放A,再按下B时。
...全文

相关推荐

评论 16
收藏 已收藏
分享
返回顶部
aipb2008
Java SE 62,621 成员 307,251 内容