国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

解決JAVA鍵盤監聽的延遲現象以及八個方向的運動

2019-11-06 06:32:54
字體:
來源:轉載
供稿:網友

首先解釋一下鍵盤出現延遲的原因:

其實鍵盤為了用戶體驗,在按下一次按鍵之后,會有片刻的延遲,為什么會這樣呢?

你想一下,當你打一個字母時,連著出來了好幾個字母,你心里面的感受是怎么樣的?

所以嘛,鍵盤還是很人性化的。

知道問題所在,那就說解決辦法吧,用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{		@Override		public void keyTyped(KeyEvent e) {			// TODO 自動生成的方法存根		}		@Override		public 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;		}		@Override		public 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

共勉~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庄河市| 仲巴县| 西吉县| 依兰县| 遂川县| 大兴区| 黄大仙区| 大关县| 安阳市| 宜宾市| 同德县| 探索| 孟连| 尉犁县| 阜南县| 乌拉特前旗| 济源市| 新乡市| 甘谷县| 大渡口区| 名山县| 榆社县| 合山市| 贵南县| 元氏县| 凭祥市| 凤山县| 邛崃市| 南投市| 巴里| 沭阳县| 开封县| 祁门县| 博客| 潮州市| 莱阳市| 雷州市| 台中市| 治多县| 文化| 齐齐哈尔市|