`

按键不冲突

    博客分类:
  • java
阅读更多

在编写雷霆战机游戏的时候,发现按键会相互冲突,左右移动会有卡顿现象,后来参考了大量网页,想到一个解决思路,经测试可以运行.

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 解决沉浸式状态栏和华为虚拟按键冲突

    通过以上策略,开发者可以有效地解决Android应用在华为设备上的沉浸式状态栏与虚拟按键冲突问题,提供一致且良好的用户体验。在开发过程中,不断学习和掌握Android系统的特性和设备差异,是提升应用质量的关键。

    可设置单键连发 多键连发 打字不冲突

    解决在关闭连发的情况下所有按键都不正常的BUG,优化了脚本,效率提高,(请务必更新)。该BUG的表现:按住还能连发(速度慢),有时候随便按个键还按不出(按键不正常)。 不过使用时还是切换到默认英文输入法可以减少...

    国外的鼠标反转 反方向软件

    别小看键鼠,里面的算法不好的话,会经常失灵的,自己做一个生产力级别的掌上型键鼠可以防止鼠标手和肩膀麻木,前提是必须用大品牌的键鼠套装改,我用的是联想的,鼠标有8g的加速度,多个按键不冲突,按ctrl可以流利...

    按键(独立按键和矩阵按键)

    这种方法节省了硬件资源,但在处理按键冲突(多个按键同时按下)时需要更复杂的软件算法。 在单片机编程中,处理按键的常见方法包括中断和轮询。中断模式下,当按键改变状态时,单片机会接收到中断请求,然后执行...

    zstack实现两个按键不干扰程序

    这种方法能快速准确地检测到按键事件,但需要正确管理中断优先级以避免按键冲突。 3. **去抖动处理**:由于机械按键的抖动,短时间内可能会产生多次中断请求。去抖动技术可以避免这种误触发,通常采用延时检测或者...

    单片机多按键状态机的实现

    后者通常需要考虑按键冲突问题,例如使用扫描码矩阵或编码算法避免同时按下多个按键时的误判。 8. 优化:可以引入消抖电路或软件消抖技术,减少因机械抖动导致的误读。同时,通过合理安排扫描频率和优化事件处理...

    电脑按键冲突修复.txt

    电脑选中文件右键未响应的解决方法

    实现多按键同时按下处理程序C语言

    在C语言中,实现多按键同时按下处理程序是一项挑战性的任务,因为标准的C库并不直接支持这样的功能。通常,C语言的输入处理是基于字符流的,这意味着它一次只能处理一个字符,而不是同时处理多个按键。不过,通过...

    状态机+定时器方法实现按键

    - 为了避免按键冲突,可以采用矩阵键盘布局,通过扫描行和列来确定哪个按键被按下。 - 使用中断驱动的按键检测,减少CPU的轮询负担。 - 定时器的中断服务程序应尽可能简短,避免影响其他中断服务。 总结,通过结合...

    多按键中断,多按键中断51,C,C++

    3. **互不干扰**:在多按键中断的实现中,互不干扰是指每个按键按下时,其对应的中断都能被准确触发,并在ISR中得到正确的响应,而不会因为其他按键的按下而产生冲突或错误。 ### 二、51单片机和STM32的中断系统 ...

    按键驱动文档详解

    5. **多按键处理**:对于矩阵键盘,需要正确处理同时按下的多个按键,避免按键冲突。 6. **中断优先级**:在有多个中断源的系统中,合理设置按键中断的优先级,确保关键操作的及时响应。 7. **错误处理**:考虑到...

    浅谈ADC按键的应用设计

    考虑到实际应用中的各种误差(如电阻值误差、电压波动等),设计时应合理规划按键的电压范围,避免不同按键之间产生冲突。 #### 按键电路的形式 **2.1 基本并联型** 并联型按键电路中,每个按键通过一个独立的...

    按键精灵随意更改键盘按键属性

    6. **注意事项**:更改键盘按键属性可能会影响系统的正常功能,因此在进行映射时,要确保不会与系统默认的快捷键冲突,以免造成不便。 此外,按键精灵还支持脚本编写,对于有编程基础的用户,可以直接编写脚本来...

    键盘按键修改器

    在日常使用中,我们可能会遇到键盘个别键位损坏、功能冲突或者想要自定义快捷键的情况,这时候,键盘按键修改器就能派上用场。通过这款软件,用户可以将原本无法正常工作的按键重新映射到其他功能键上,甚至可以设置...

    文件批量重命名_按键精灵文件批量重命名_

    具体源码的细节,例如是否考虑了文件名冲突、如何处理特殊字符等,就需要打开提供的"文件批量重命名.Q"来查看。 "文件批量重命名.Q"很可能是一个按键精灵的脚本文件,扩展名".Q"是按键精灵默认的脚本文件格式。打开...

    android添加外部按键

    在Android系统中,添加外部按键的支持是一项常见的需求,特别是在开发硬件设备或特殊应用时。本文将详细介绍如何在Android应用程序中...在实际项目中,务必注意处理好按键冲突和无障碍性问题,以提供良好的用户体验。

    按键代码_获取后台多窗口句柄

    按键精灵获取后台多窗口句柄代码 MessageBox "点击“确定”,3秒后开始获取第一个窗口!" Delay 3000 DimEnv awnd ....

    K60单片机矩阵按键

    7. **多键处理**:矩阵按键可以同时检测多个按键,但需要正确处理按键冲突问题。这通常通过优先级或扫描顺序来解决,确保每次只有一个按键被视为有效。 8. **应用层逻辑**:最后,识别到的按键事件会触发应用层的...

    状态机矩阵按键程序

    - 按键冲突:当多个按键同时按下时,需要确保能正确识别出所有按下按键。矩阵按键设计时,应避免出现按键组合导致的短路问题。 - 轮询频率:状态机的扫描速度应足够快,以便在按键按下后迅速响应,但也不能过高,...

Global site tag (gtag.js) - Google Analytics