(80分跪求解答)分析下这段代码,8个方向的键盘监听器
//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时。
...全文
相关推荐
2021-2022计算机二级等级考试试题及答案No.16667.docx
2021-2022计算机二级等级考试试题及答案No.16667.docx
计算机文档资源文档JAVA计算器代码
计算机文档资源文档JAVA计算器代码
JS实现小球的弹性碰撞效果
主要介绍了JS实现小球的弹性碰撞效果 ,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
2021-2022计算机二级等级考试试题及答案No.12708.docx
2021-2022计算机二级等级考试试题及答案No.12708.docx
Java试题供学习用
一. 简答题(60分) 1. 什么叫套接字(Socket)?端口有什么作用?(6分) 2.写出在用TCP套接字实现客户和服务器通信的基本步骤。(10分) 3.线程创建有几种方式?如何创建一个线程类,并使它具有多重继承的功能?(8分)


Java SE
