使用键盘监听器来控制图片的移动:
1,创建一个窗体, 重写这个paint()方法来绘制图片和窗体,刷新
preson.draw();
如果电脑配置不是很好就只要刷新JPanel就可以了, 不用刷新JFrame(JFrame比较消耗内存)
2,将图片看成是一个对象,新建一个图像类, 需要坐标和图片 ,
public int x ,y;
ImageIcon icon;
public preson(int x, int y, ImageIcon icon) {
super();
this.x = x;
this.y = y;
this.icon = icon;
}
//绘制图片
public void draw(Graphics g){
g.drawImage(icon.getImage(), x,y, null);
}
3,添加监听器来控制图片的移动,键盘监听器KeyListener在实现监听器时,必须要重写方法
在控制图片移动的时,只需要键盘的按下键就可以
public void keyTyped(KeyEvent e){}
/**
* Invoked when a key has been pressed.
* See the class description for {@link KeyEvent} for a definition of
* a key pressed event.
*/
//按下
public void keyPressed(KeyEvent e){}
/**
* Invoked when a key has been released.
* See the class description for {@link KeyEvent} for a definition of
* a key released event.
*/
//释放
public void keyReleased(KeyEvent e){}
键盘监听器控制的是图片,需要将图片通过构造方法传给监听器,才可以继续写移动的方法,
int code= e.getKeyCode();可以得到按下键的一个数,通过这个数可以使用switch来控制移动的方向及每次移动的距离
移动的方向必须是KeyEvent.vk_需要移动的方向
移动的距离必须是图片类.x -=10 preson.x -=10;
public void keyPressed(KeyEvent e){
switch (code) {
case KeyEvent.VK_LEFT: //向左
preson.x -=10;
break;
case KeyEvent.VK_RIGHT : //向右
preson.x +=10;
break;
case KeyEvent.VK_UP : //向上
preson.y -=10;
break;
case KeyEvent.VK_DOWN : //向下
preson.y +=10;
break;
default:
break;
}
}
4,上述3个步骤可以移动图片,但是图片会不断的闪,这时需要开启线程来控制刷新
通过构造方法将JPanel传给需要去启动线程的对象
在run()方法中直接调用JPanelde repaint();方法 ,并且让线程休眠一定的时间再刷新 就解决了图片不断闪的问题
public class UpdateThread extends Thread {
GameUI ui;
public UpdateThread(GameUI ui){
this.ui = ui;
}
public void run(){
while(true){
ui.repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
本人在实际编写中没有把图片当成是一个对象来处理,直接在主窗体中将ImageIcon icon = new ImageIcon("24.png"); 中的icon作为监听对象 ,也可以实现, 但是在JAVA中要将所有的都看成是类或对象来处理 才能显示出JAVA的强大
本人接触游戏不久,游戏开发比较难,所以将自己理解的 通过这个平台写出来加深理解, 技术有限 如有更好的方式欢迎交流