一开始画个圆形,能随意控制移动,从外部导入图片后,就不受控制了,
建立了两个类,一个主类,一个坦克类。不知道怎么搞的,就是动不起来,高手指点下迷津,实在感激不尽了。
省略号是省略的代码
public class TankClient extends Frame { //主要类,用于调用坦克类
Frame fr = new NewTank(30,30); //创建新坦克,并传入坐标值
public void paint(Graphics g) { //绘制Tank
fr.paint(g);
} public void lauchFrame() { //绘制界面
.....
.....
new Thread(new PaintThread()).start(); //起一个线程,不断刷新Paint方法
fr.addKeyListener(new KeyBorad()); //添加键盘监听器
}
private class KeyBorad extends KeyAdapter { //内部类,调用 坦克类 移动方法 public void keyPressed(KeyEvent e) {
((NewTank) fr).keyPressed(e);
}
}}
public class NewTank extends Frame { //坦克类
public NewTank(int x , int y) { //构造方法,导入图像
this.x = x;
this.y = y;
image = getToolkit().getImage(getClass().getResource("Tank.gif"));
}
public void paint(Graphics g) { //绘制坦克
g.drawImage(image,x,y,this);
}
public void keyPressed(KeyEvent e) { //Tank 移动方法
int key = e.getKeyCode(); //获得键盘任意键值,返回INT类型
if(key == KeyEvent.VK_UP) {
y -= TANK_MOVE_VALUE; //移动值常量
......
......
} 以上应该是代码的关键部分了,绘制图像的初始位置X,Y,这两个变量,无论我下面如何更改,坦克就是不动,我很郁闷,请高手指点下。感激不尽!!!!!!!!!!!
建立了两个类,一个主类,一个坦克类。不知道怎么搞的,就是动不起来,高手指点下迷津,实在感激不尽了。
省略号是省略的代码
public class TankClient extends Frame { //主要类,用于调用坦克类
Frame fr = new NewTank(30,30); //创建新坦克,并传入坐标值
public void paint(Graphics g) { //绘制Tank
fr.paint(g);
} public void lauchFrame() { //绘制界面
.....
.....
new Thread(new PaintThread()).start(); //起一个线程,不断刷新Paint方法
fr.addKeyListener(new KeyBorad()); //添加键盘监听器
}
private class KeyBorad extends KeyAdapter { //内部类,调用 坦克类 移动方法 public void keyPressed(KeyEvent e) {
((NewTank) fr).keyPressed(e);
}
}}
public class NewTank extends Frame { //坦克类
public NewTank(int x , int y) { //构造方法,导入图像
this.x = x;
this.y = y;
image = getToolkit().getImage(getClass().getResource("Tank.gif"));
}
public void paint(Graphics g) { //绘制坦克
g.drawImage(image,x,y,this);
}
public void keyPressed(KeyEvent e) { //Tank 移动方法
int key = e.getKeyCode(); //获得键盘任意键值,返回INT类型
if(key == KeyEvent.VK_UP) {
y -= TANK_MOVE_VALUE; //移动值常量
......
......
} 以上应该是代码的关键部分了,绘制图像的初始位置X,Y,这两个变量,无论我下面如何更改,坦克就是不动,我很郁闷,请高手指点下。感激不尽!!!!!!!!!!!
可以试验下可行不,呵呵
public void keyPressed(KeyEvent e) { //Tank 移动方法
int key = e.getKeyCode(); //获得键盘任意键值,返回INT类型
if(key == KeyEvent.VK_UP) {
y -= TANK_MOVE_VALUE;
System.out.println("动了吗");
bU = true;
}
else if (key == KeyEvent.VK_DOWN) {
y += TANK_MOVE_VALUE;
bD = true;
}
else if(key == KeyEvent.VK_LEFT) {
x -= TANK_MOVE_VALUE;
bL = true;
}
else if(key == KeyEvent.VK_RIGHT) {
x += TANK_MOVE_VALUE;
bR = true;
} }这个是坦克类的完整 控制方法,没用调用 repanint方法。
repanint方法。在在TankClient里用线程来刷的。具体如下
private class PaintThread implements Runnable { //启动线程,不断调用paint方法,重新绘图 public void run() {
while(true) {
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
System.out.println("睡眠被打断");
e.printStackTrace();
}
}
}
}
键盘监听事件都起作用,但是图片就是无法移动
1、是不是被调用了
2、调用时的参数是否正确
keyPressed()方法里,发现起作用了,能动了~~~!!!
非常感谢