飞机大战之-添加子弹

现在添加字段对象,子弹,敌机,玩家,都是属于modle包中的对象,所以我们新建一个类Bullet
1/定义子弹需要的一些常量,子弹图片的长宽,子弹的坐标。
然后使用Tooklit.getDefaultToolkit().getImage(“文件路径”);
获得子弹图片,新建一个Imageindex变量做为图片的下标,和之前一样,我们要让子弹有动画看起来是旋转的。

package modle;

import java.awt.Image;
import java.awt.Toolkit;

import view.MyPanel;

public class Bullet {
	
	public MyPanel myPanel;
	
	//子弹的坐标x和y
	public int x,y;
	
	//子弹图片的长和宽
	public int height, width;
	
	public Bullet(MyPanel myPanel)
	{
		
		this.myPanel = myPanel;
		
	}
	
	public int imageindex = 0;
	public Image[] images = new Image[] {
			Toolkit.getDefaultToolkit().getImage("images/bullet01.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet02.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet03.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet04.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet05.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet06.png"),
			
	};
	
	
}

然后添加画子弹的方法

public void drawSelf(Graphics g)
	{
		g.drawImage(images[imageindex], x, y, width, height, null);
	}
public void drawSelf(Graphics g)
	{
		g.drawImage(images[imageindex], x, y, width, height, null);
	
		if(this.myPanel.time %  4 ==0)
		{
			//每四毫米图片变化一次
			imageindex ++;
			
			if(imageindex == images.length)
			{
				imageindex = 0;
			}
			//子弹移动
			y --;
			
			//超出屏幕移除子弹
			
			
		}
	
	
	}

接下来去MyPanel类中添加子弹
子弹有很多的,而且我们不知道数量,所以我们使用一个ArrayList来存储子弹

在MyPanel类中

public ArrayList<Bullet> bullets = new ArrayList<Bullet>();

然后在我们的子弹中添加移除子弹的方法,生成一个子弹,系统占用一部分内存,不删除最后导致程序异常。

package modle;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import view.MyPanel;

public class Bullet {
	
	public MyPanel myPanel;
	
	//子弹的坐标x和y
	public int x,y;
	
	//子弹图片的长和宽
	public int height, width;
	
	public Bullet(MyPanel myPanel)
	{
		
		this.myPanel = myPanel;
		
	}
	
	public int imageindex = 0;
	public Image[] images = new Image[] {
			Toolkit.getDefaultToolkit().getImage("images/bullet01.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet02.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet03.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet04.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet05.png"),
			Toolkit.getDefaultToolkit().getImage("images/bullet06.png"),
			
	};
	
	
	//绘制子弹
	public void drawSelf(Graphics g)
	{
		g.drawImage(images[imageindex], x, y, width, height, null);
	
		if(this.myPanel.time %  4 ==0)
		{
			//每四毫米图片变化一次
			imageindex ++;
			
			if(imageindex == images.length)
			{
				imageindex = 0;
			}
			//子弹移动
			y --;
			
			//超出屏幕移除子弹
			if(y < 0)
			{
				this.myPanel.bullets.remove(this);
			}
			
		}
	
	
	}
	
	
}

现在子弹有了,我们要去MyPanel中绘制我们的子弹
重构成一个单独的方法

public void paintBullets(Graphics g)
	{
		//创建子弹
		Bullet bullet = new Bullet(this);
		//把子弹的坐标绑定在玩家上
		bullet.x = this.player.x;
		bullet.y = this.player.y;
		this.bullets.add(bullet);
		
		//便利数组,绘制子弹
		for(int i =0; i<bullets.size();i++)
		{
			this.bullets.get(i).drawSelf(g);
		}
		
	}
		
	}

这样就结束了吗? 不,我们运行会发现子弹是一条连续的细线,因为为绘制子弹一的方法一直会被调用,所以我们要使用time 来限制子弹的发射速度。

//绘制子弹
	public void paintBullets(Graphics g)
	{
		if(time % 100 == 0)
		{
			//创建子弹
			Bullet bullet = new Bullet(this);
			//把子弹的坐标绑定在玩家上
			bullet.x = this.player.x+this.player.width/2-4;
			bullet.y = this.player.y;
			this.bullets.add(bullet);
		}
		//便利数组,绘制子弹
		for(int i =0; i<bullets.size();i++)
		{
			this.bullets.get(i).drawSelf(g);
		}
		
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘璐菲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值