我们的玩家,以及各种敌机可以归为一类,所以我们新建一个包, modle用与存放各种飞机。接下来就是新建一个Player类用来表示我们的玩家。
回想之前的创建背景图, 创建背景图的时候我们新建了一些常量, 例如 背景图的长和宽
所以在新间玩家时,我们也创建玩家的长和宽 ,以及玩家的横纵坐标。
package modle;
public class Player {
public int width = 100;
public int height = 100;
public int x, y;
public Player()
{
}
}
最最重要的 我们玩家的图片还需要新建一个变量, 但是由于我们的玩家是有多个图片组合起的动态效果,所以我们需要新建一个图片数组用于存放玩家的图片,形成动画效果。
为了访问图片数组,所以我们定义一个数组下标变量。
获得图片的函数和之前获得背景是一个函数。
package modle;
import java.awt.Image;
import java.awt.Toolkit;
public class Player {
public int width = 100;
public int height = 100;
public int x, y;
public Image player[] = {
Toolkit.getDefaultToolkit().getImage("images/player01.png"),
Toolkit.getDefaultToolkit().getImage("images/player02.png"),
Toolkit.getDefaultToolkit().getImage("images/player03.png"),
Toolkit.getDefaultToolkit().getImage("images/player04.png"),
Toolkit.getDefaultToolkit().getImage("images/player05.png"),
Toolkit.getDefaultToolkit().getImage("images/player06.png"),
Toolkit.getDefaultToolkit().getImage("images/player07.png"),
Toolkit.getDefaultToolkit().getImage("images/player08.png"),
Toolkit.getDefaultToolkit().getImage("images/player09.png"),
Toolkit.getDefaultToolkit().getImage("images/player10.png"),
};
public int indexImage = 0;
public Player()
{
}
}
接下来就是让我们的玩家动起来, 我们需要使用 定义在MyPanel中的time定时器,根据时间来改变图片。所以在Player构造方法中接收MyPanel参数。
接着新建一个MyPanle对象用于保存构造函数中的MyPanel。
package modle;
import java.awt.Image;
import java.awt.Toolkit;
import view.MyPanel;
public class Player {
public MyPanel myPanel;
public int width = 100;
public int height = 100;
public int x, y;
public Image player[] = {
Toolkit.getDefaultToolkit().getImage("images/player01.png"),
Toolkit.getDefaultToolkit().getImage("images/player02.png"),
Toolkit.getDefaultToolkit().getImage("images/player03.png"),
Toolkit.getDefaultToolkit().getImage("images/player04.png"),
Toolkit.getDefaultToolkit().getImage("images/player05.png"),
Toolkit.getDefaultToolkit().getImage("images/player06.png"),
Toolkit.getDefaultToolkit().getImage("images/player07.png"),
Toolkit.getDefaultToolkit().getImage("images/player08.png"),
Toolkit.getDefaultToolkit().getImage("images/player09.png"),
Toolkit.getDefaultToolkit().getImage("images/player10.png"),
};
public int indexImage = 0;
public Player(MyPanel myPanel)
{
this.myPanel = myPanel;
}
}
然后我们可以利用time 去创建动画,接下来画我们的玩家。
编写drawPlayer()方法记得我们使用该方法的参数Graphics g来绘制。
public void drawPlayer(Graphics g)
{
g.drawImage(this.player[indexImage], x, y, width, height,null);
}
接下来就是利用myPanel中的time去改变图片,形成动画。
```java
if(myPanel.time % 50 == 0)
{
indexImage ++;
if(indexImage == player.length)
{
indexImage = 0;
}
}
动画制作完了最后设置玩家的位置(利用窗口类BaseFrame中的静态常量,窗口的宽和高去改位置)
public Player(MyPanel myPanel)
{
this.myPanel = myPanel;
this.x = (BaseFrame.frameWidth - this.width) / 2;
this.y = (BaseFrame.frameHeight - this.height * 2) ;
}
接下来就是去MyPanel中调用该绘制方法drawPlayer()
1.新建一个 Player对象,
2.MyPanel构造函数中添加玩家对象,
3.用玩家调用绘制方法drawPlayer()
package view;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;
import modle.Player;
import thread.DrawbleThread;
public class MyPanel extends JPanel{
public Image bgImage;
public int time = 0;
public int top = 0;
public DrawbleThread drawbleThread;
public Player player;
public MyPanel()
{
//设置背景
this.bgImage = Toolkit.getDefaultToolkit().getImage("images/bg01.jpg");
//添加玩家
this.player = new Player(this);
//创建线程
this.drawbleThread = new DrawbleThread(this);
//启动线程
this.drawbleThread.start();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(this.bgImage, 0,
top-this.bgImage.getHeight(this),
this.bgImage.getWidth(this),
this.bgImage.getHeight(this),
null);
g.drawImage(this.bgImage, 0,top,
this.bgImage.getWidth(this),
this.bgImage.getHeight(this),
null);
time ++;
if(time == 10000)
time = 0;
if(time % 10 == 0)
{
top ++;
if(top >= this.bgImage.getHeight(this))
{
top = 0;
}
}
this.player.drawPlayer(g);
}
}