首先我们要明白爆炸特效的原理就是根据类创造一个对象,然后在子弹碰撞位置将爆炸对象绘制出来
首先我们需要设置一个爆炸类继承至GameObject
爆炸类和其他类不一样,他的图片有5张挨个播放构成动画,我们可以重写父类的设置图片方法将5张图片间隔两帧挨个替换绘制
爆炸类中有几个必须要的参数,构成动画的五张图片,动画播放速度,更换图片计数器,图片索引
我们先将5张图片放入一个数组
Bitmap[] boombit = new Bitmap[] {Resources.EXP1, Resources.EXP2 , Resources.EXP3 , Resources.EXP4 , Resources.EXP5 };
//将爆炸播放动画的5张图片挨个放入集合方便遍历使用
然后设置基础参数
public static int boomspeed = 2;//默认爆炸速度等于二
public static int jishu = 0;//默认计数器等于0
public static int index = -1;//设置基础索引
创建构造函数
public Boom(int x,int y)//构造函数
{
foreach (Bitmap b in boombit)//遍历图片
{
b.MakeTransparent(Color.Black);//将图片黑色全部设置为透明
}
this.x = x - kuan / 2;//根据碰撞位置调整生成位置,将图片产生位置设置好
this.y = y - gao / 2;
}
由于我们需要将图片的黑色部分设置为透明,可以在调用构造函数时设置图片,然后将设置图片生成位置为传入位置的左上方一些,确保传入位置在图片的中心
继承父类的update方法
public override void update()//重写父类的代码
{
shezhiindex();
base.update();//获取父类中此方法的代码,获取绘制方法
}
由于图片在数组中,所以我们设置图片的时候需要不停改变索引,我们可以设置一个每帧变化索引的方法
private static void shezhiindex()//设置生成的图片索引
{
if (index < 4)
{
jishu++;//每运行一次计数器加一
index = (jishu - 1) / boomspeed;//将计数器和速度计算的结果设置成索引
}
}
然后重写父类的设置图片代码,将图片根据索引改变
protected override Image shehziImage()//重写设置图片方法
{
return boombit[index];//设置图片
}
在对象设置类中放置生成的爆炸对象以及设置生成爆炸对象方法
先创建一个列表放置爆炸对象方便实例化
private static List<Boom>boomlist=new List<Boom>();//创建一个爆炸类型列表放置爆炸效果
然后创建爆炸对象生成方法,将生成爆炸对象以及将对象放入列表写进去
public static void boom(int x,int y)//设置爆炸特效
{
Boom boom=new Boom(x,y);
boomlist.Add(boom);//将boom类型放入数组
}
这样就做好了生成爆炸特效的方法,然后我们需要在子弹类型中子弹碰撞时将爆炸特效生成
if ((gd=duixiangweizhi.wallpengzhuang(rec)) != null)//调用墙体碰撞检测方法,传入自身矩形检测碰撞
{
duixiangweizhi.boom(boomx,boomy);//创建爆炸特效
xiaohui = true;
duixiangweizhi.wallxiaohui(gd); return;//如果碰撞检测返回结果不为空那么将碰撞到的墙传参然后销毁
}
if((rg=duixiangweizhi.renjipengzhuang(rec))!=null)//检测碰撞到人机
{
duixiangweizhi.boom(boomx, boomy);//创建爆炸texiao
xiaohui = true;
duixiangweizhi.renjixiaohui(rg); return;
}
这样爆炸特效就创建出来了,下一节我们讲怎么将爆炸特效播放完毕后消除