飞机大战之-添加玩家

我们的玩家,以及各种敌机可以归为一类,所以我们新建一个包, 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);
		
	}
	
	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘璐菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值