首先解释一下键盘出现延迟的原因:

其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢?

你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的?

所以嘛,键盘还是很人性化的。

知道问题所在,那就说解决办法吧,用boolean就可以解决这个问题,

比如刚开始设置一个UP = false;

当UP = true时,让物体运动;

当按下上键时,把UP = true;

当松下上键时,把UP = false;

这样的话延迟岂不是解决了,只要你不松上键,UP 就一直为true,物体就一直运动;

写了个小例子,可以控制物体的八个方向的运动:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;public class MyGame extends JPanel{JFrame frame;int x = 10;int y = 10;int width = 50;int height = 50;int step = 5;boolean U=false,D=false,L=false,R=false;MyGame(){frame = new JFrame();frame.setSize( 800, 600);frame.setLayout(null);this.setLayout(null);this.setBackground(Color.blue);this.setBounds(0, 0, 800, 600);this.setFocusable(true);this.addKeyListener(new Mykey());frame.add(this);frame.setLocationRelativeTo(null);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) {new MyGame();}public void paint(Graphics g){super.paint(g);g.setColor(Color.YELLOW);g.fillOval(x, y, width, height);repaint();run();try {Thread.sleep(20);} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}public void run(){if(!U&&!D&&L&&!R){x-=step;}else if(!U&&!D&&!L&&R){x+=step;}else if(U&&!D&&!L&&!R){y-=step;}else if(!U&&D&&!L&&!R){y+=step;}else if(U&&!D&&L&&!R){x-=step;y-=step;}else if(!U&&D&&L&&!R){x-=step;y+=step;}else if(U&&!D&&!L&&R){x+=step;y-=step;}else if(!U&&D&&!L&&R){x+=step;y+=step;}}class Mykey extends KeyAdapter{@Overridepublic void keyTyped(KeyEvent e) {// TODO 自动生成的方法存根}@Overridepublic void keyPressed(KeyEvent e) {// TODO 自动生成的方法存根switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:L=true;break;case KeyEvent.VK_RIGHT:R=true;break;case KeyEvent.VK_UP:U=true;break;case KeyEvent.VK_DOWN:D=true;break;}if(x<=0) L = false;else if(x>=700) R = false;if(y<=0) U = false;else if(y>=490) D = false;}@Overridepublic void keyReleased(KeyEvent e) {// TODO 自动生成的方法存根switch (e.getKeyCode()) {case KeyEvent.VK_LEFT:L=false;break;case KeyEvent.VK_RIGHT:R=false;break;case KeyEvent.VK_UP:U=false;break;case KeyEvent.VK_DOWN:D=false;break;}}}
}

如果遇到闪烁现象,请看http://blog.csdn.net/sangjinchao/article/details/53052897

共勉~

解决JAVA键盘监听的延迟现象以及八个方向的运动相关推荐

  1. java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动

    首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...

  2. java键盘监听keyadapter_JAVA 键盘监听当中,释放键盘并没有停止运动

    package plane; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyAdapter; im ...

  3. java键盘监听wasd控制,基于数据分析定制一块好键盘

    [作者: 0han] 首先推荐一个机械键盘品牌"WASD"(链接), 所有的机械轴都是cherry原厂的,他支持用户自定义每个键帽的颜色,先展示一张配色: 有没有nmd的既视感.. ...

  4. 键盘VK键值(java键盘监听)

    键盘VK键值列表 /* Virtual Keys, Standard Set*/ VK_LBUTTON                                      0x01 VK_RBU ...

  5. java键盘监听事件代码_JavaScript监听键盘事件代码实现

    在写网页的时候,常常需要监听键盘事件,让我们来看看如何实现吧. 监听方式 键盘事件往往是全局监听,设监听的函数为keyboard(). keyup事件类型.该类型触发条件为按键按下去并松开. //长按 ...

  6. java键盘监听wasd控制_dota2rpg自定义按键绑定及WASD移动的实现

    本文的目的是在DOTA2自定义游戏中实现一个WASD控制的8方向移动,如果你想实现的是4方向的,稍微修改一点点代码也可以做到. 通过本文,你也可以了解到DOTA2自定义按键的流程. 本文的所有代码你都 ...

  7. Java日记_17.9.01——点击按钮后,键盘监听失效的原因与解决办法

    最近在自学JAVA,听了前辈的安利在做自己的小画板,然后悲剧就发生了,同时添加按钮和键盘监听之后,就产生了如题的问题,一直觉得是自己监听事件注册的不对,改了一天,然后终于找到了原因,真的巨坑啊我觉得q ...

  8. JAVA飞机移动斜着走_通过键盘的能够使飞机上下左右八个方向移动,现在实现键盘监听时没有反应是怎么回事,哪里出错了?...

    通过键盘的能够使飞机上下左右八个方向移动,现在实现键盘监听时没有反应是怎么回事,哪里出错了? 关注:93  答案:2  mip版 解决时间 2021-01-30 07:58 提问者雨份凉伴 2021- ...

  9. 解决Fiddler不能监听Java HttpURLConnection请求的方法

    在默认情况下,Fiddler不能监听Java HttpURLConnection请求.究其原因,Java的网络通信协议栈可能浏览器的通信协议栈略有区别,Fiddler监听Http请求的原理是 在应用程 ...

最新文章

  1. php pthread安装编译,php 多线程扩展 pthreads 安装 及 使用
  2. Spring Aop的应用
  3. 邬贺铨:解读5G技术关键点,及如何影响AIoT
  4. AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML)
  5. 厌倦了 VMware,试试更轻量级的虚拟机!
  6. 洛谷P1541 乌龟棋
  7. 工作流实战_27_flowable 自定义sql查询
  8. C语言默认参数值的实现
  9. J2EE视频实战教程网址
  10. 企业微信客户端调试工具
  11. navicat的使用技巧
  12. Reveal Effect(揭露效果)低版本兼容
  13. 图灵测试其实已经过时了
  14. Shiro的在Springboot中的使用
  15. 计算机网络基础之传输介质
  16. Unity-Live2d(模型与贴图建立联系,渲染,显示图片)
  17. Html标签分类及总结
  18. 每个工程师都应该知道的事——射频发射机功率怎么测量
  19. getInputStream() has already been called for this request解决方法二
  20. submit()和execute()区别

热门文章

  1. SQL-SERVER 中使用POVIT完成行列转换
  2. POJ-3013: Big Christmas Tree(dij,spfa)
  3. Java 17 采用率增长 430%、Java 11 稳居第一,最新 Java 编程语言报告来了!
  4. Silverlight 2完美征程下载
  5. 一款修改字体(简繁转换)
  6. 双线路带宽叠加后,指定网站走指定线路!
  7. 电脑某个服务器的网站都打不开,电脑某个网站打不开的解决方法
  8. byr-加不加都告诉你
  9. 全国计算机考试一级与ata,ata(ata证书是计算机一级吗)
  10. npm install:Comand failed:E\pythopython.exe ................................