`

按键不冲突

    博客分类:
  • 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); //设置窗体可见
		}
	}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics