设置飞机宽度、高度、横坐标、纵坐标
public int width = 100;
public int height = 100;
public int x;
public int y;
用数组存放所有飞机对象
public Image[] images = new Image[]{
Toolkit.getDefaultToolkit().getImage("images/player01.png"),
Toolkit.getDefaultToolkit().getImage("images/player02.png"),
Toolkit.getDefaultToolkit().getImage("images/player03.png")
};
用变量imageindex存储当前图片下标
public int imageindex = 0;
设置Player构造方法,因为飞机是在MyPanel上进行绘制,所以我们需要MyPanel的一些参数。
public Player(MyPanel myPanel){
this.myPanel = myPanel;
//飞机横坐标在窗口中间,纵坐标在距离窗口下方两个飞机高度处
this.x = (BaseFrame.frameWidth - this.width)/2;
this.y = BaseFrame.frameHeight - this.height*2;
}
将飞机类的绘制过程用drawSelf方法进行封装
public void drawSelf(Graphics g){
//画飞机
g.drawImage(this.images[imageindex], x, y, width, height, null);
//每隔50毫秒改变飞机图片一次
if(this.myPanel.timer%50==0){
imageindex++;
if(this.imageindex == this.images.length)
this.imageindex = 0;
}
}
将飞机放在myPanel上
public Player player;
新建一个Player对象
this.player = new Player();
在paintComponent方法绘制飞机:
this.player.drawSelf(g);
使用监听器监视鼠标单击事件
public class FrameMouseListener implements MouseListener{
}
因为要实现鼠标点击哪里飞机就会出现在哪里的功能,所以我们需要对整个窗体设置监听器,在FrameMouseListener类内定义BaseFrame对象。
public BaseFrame baseFrame;
给整个窗体设置监听器后,当鼠标点击窗体的某个位置时,就会触发鼠标监听器MouseListener的mouseClick(MouseEvent e)方法,所以我们把点击后要实现的动作在这个方法里完成。
public void mouseClick(MouseEvent e){
//飞机的坐标修 改为 鼠标坐标减去飞机宽高的一半
this.baseFrame.myPanel.Player.x = e.getX()-this.baseFrame.myPanel.player.width/2;
this.baseFrame.myPanel.Player.y = e.getY()-this.baseFrame.myPanel.Player.height/2;
}
给BaseFrame对象添加监听器,我们需要新建一个监听器对象
public FrameMouseListener frameMouseListener;
然后给窗体添加监听器
public BaseFrame {
this.frameMouseListener = new FrameMouseListener();
this.frameMouseListener.baseFrame = this;
this.addMouseListener(this.frameMouseListener);
}