在编写雷霆战机游戏的时候,发现按键会相互冲突,左右移动会有卡顿现象,后来参考了大量网页,想到一个解决思路,经测试可以运行.
1.给按键keyPressed 和keyRelease都设置一个标志位
2.按下按键将标志位设置为true
3.松开按键将标志位设置为false
4.在线程中执行具体移动事件
具体演示源代码如下
package s0218按键不冲突; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JPanel; public class Main1214 extends JFrame { static int x=50; static int y=50; static int speed=10; static boolean upFlag=false; static boolean downFlag=false; static boolean leftFlag=false; static boolean rightFlag=false; public static void main(String[] args) { Main1214 a= new Main1214(); while(true) { try {Thread.sleep(30);} catch (InterruptedException e) {e.printStackTrace();} if(upFlag) {y-=speed;}//向上移动 if(downFlag) {y+=speed;}//向下移动 if(leftFlag) {x-=speed;}//向左移动 if(rightFlag) {x+=speed;}//向右移动 a.repaint();//重绘 } } Main1214() { this.setTitle("移动滑块"); //设置窗体标题 this.setDefaultCloseOperation(3);//设置窗体关闭方式 this.setSize(700,700); //设置窗体大小 this.setResizable(true); //设置窗体大笑可变 this.setLocationRelativeTo(null);//设置窗体居中 JPanel drawPanel=new JPanel(){ //创建画板对象,用来画图 public void paint(Graphics g) { super.paint(g); g.fillRect(x,y,30,30); //画出方块 } }; this.addKeyListener(new KeyAdapter() //匿名对象和匿名内部类的使用 { //关键代码************************************************************************** public void keyPressed(KeyEvent e) //按下按键 { if(e.getKeyCode()==KeyEvent.VK_W){upFlag=true;} if(e.getKeyCode()==KeyEvent.VK_S){downFlag=true;} if(e.getKeyCode()==KeyEvent.VK_A){leftFlag=true;} if(e.getKeyCode()==KeyEvent.VK_D){rightFlag=true;} } public void keyReleased(KeyEvent e)//松开按键 { if(e.getKeyCode()==KeyEvent.VK_W){upFlag=false;} if(e.getKeyCode()==KeyEvent.VK_S){downFlag=false;} if(e.getKeyCode()==KeyEvent.VK_A){leftFlag=false;} if(e.getKeyCode()==KeyEvent.VK_D){rightFlag=false;} } //关键代码************************************************************************** }); this.add(drawPanel); //将画板添加到窗体 this.setVisible(true); //设置窗体可见 } }
相关推荐
Android 解决沉浸式状态栏和华为虚拟按键冲突问题,
解决在关闭连发的情况下所有按键都不正常的BUG,优化了脚本,效率提高,(请务必更新)。该BUG的表现:按住还能连发(速度慢),有时候随便按个键还按不出(按键不正常)。 不过使用时还是切换到默认英文输入法可以减少...
别小看键鼠,里面的算法不好的话,会经常失灵的,自己做一个生产力级别的掌上型键鼠可以防止鼠标手和肩膀麻木,前提是必须用大品牌的键鼠套装改,我用的是联想的,鼠标有8g的加速度,多个按键不冲突,按ctrl可以流利...
电脑选中文件右键未响应的解决方法
按键精灵获取后台多窗口句柄代码 MessageBox "点击“确定”,3秒后开始获取第一个窗口!" Delay 3000 DimEnv awnd ....
但是在华为手机上存在一个底部虚拟按键的问题,会导致页面底部和顶部出现很大的问题,比如页面底部导航栏被按键覆盖,导致底部无法操作,顶部状态栏布局被撑的很高,丑的不忍直视,这里就将两者的冲突问题一并解决!...
用于检测键盘能最多按多少个键不冲突,运行软件后同时按下多个键盘按键,之后会检测出多少个键不冲突。
C#如何在后台捕捉按键 [此问题的推荐答案] API别忘了 using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 ...
hKBTEST是一个小巧而专业的键盘按键冲突检测工具,使用该键盘按键冲突检测器可快速检查出哪些按键有冲突,软件能够测试键盘最大按键冲突数量! 它可以帮助您检测每一个按键,没敲打一下虚拟键盘就会在所打的键位上...
目前,按键输入电路Ⅲ主要有2种:一种是非扫描方式可以判断多键状态(允许多键同时动作),但是不适用于大量按键情况,所需I/0端口多;另一种是扫描阵列方式,适用于大量按键,但不能多键同时动作。因此,需要开发一种...
F1快捷键被占用
可以对脚本进行编辑,支持脚本录制(需要关闭360,可能是全局hook冲突) 键盘,鼠标模拟
VC++根据键盘按键显示ASCII码的源程序 VC++根据按键显示ASCII码的源程序,可以看作是一个简易的ASCII码查询程序,程序实现相当简单,初级者也可参阅。
支持电话、音频等等的冲突处理。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
键盘检测工具V2.8 绿色版,键盘检测工具V2.8 绿色版
该项目将收集常见的语音命令变体,并且可以通过投票解决冲突的关键字。 为每次碰撞创建一个问题。 对这个问题进行投票: 通过添加“ +1”或“ -1”作为注释, 或通过上的GitPoll创建问题, 或通过修改后的问题...
通过修改注册表,解决win8默认小键盘开启导致键盘混乱
多线程操作,包括开始线程,挂起线程,唤醒线程等操作,注释详细
缺点:当时用串口时,s6、s7对应那一行按键会和串口冲突, 因此这种写法在处理串口时不方便使用 解决方法:原理同下面介绍的矩阵键盘style3.c写法 2.矩阵键盘的的3种写法适用场景解析: 1.style