子弹的生成就像人机的生成一样,只不过没那么多种类的图片对象,而且不用设置初始方向,但是需要对子弹进行分类成wanjia和renji,在创建子弹的时候将方向传参就行了
首先在zidan类写一个枚举类型定义子弹的标签
enum zidanen
{
wanjia, renji
}
然后在zidan类写一个构造函数
public zidan(int x, int y, int speed, zidanen zid, fangxiang fx)//构造函数
{
this.x = x;
this.y = y;
this.speed = speed;//速度
BitmapUp = Resources.BulletUp;//设置对应方向图片
BitmapDown = Resources.BulletDown;
BitmapLeft = Resources.BulletLeft;
BitmapRight = Resources.BulletDown;
Fangxiang = fx;
this.x -= kuan / 2;//将中心点设置为坦克的生成点好确定位置
this.y -= gao / 2;
}
在物体位置设置类创建方法实例化以及归类子弹
public static void zidan(int x,int y,zidanen zid,fangxiang fx)//控制子弹的生成
{
zidan zd=new zidan(x,y,5,zid,fx);//实例化子弹
zidanlist.Add(zd);//将实例化的子弹放入列表
}
创建一个子弹列表在调用生成子弹函数的时候就将生成的子弹放入列表
将子弹列表遍历后绘制
foreach(zidan zid in zidanlist)
{
zid.update();
}
在wanjia类型中设置按下Q键调用生成子弹方法
在按下事件方法中设置
case Keys.Q://发射子弹
zidanshengcheng();
break;
我们发现创建出来的子弹位置有些歪,因为创建出来的时候子弹的中心点我们是在坦克创建是的point点位,要想子弹刚好在炮口位置上,我们需要创建一个临时的x和y根据方向的不同将修改后的位置放入
private void zidanshengcheng()//子弹生成
{
int x=this.x;//设置临时point
int y=this.y;
switch(Fangxiang)//检测当前坦克方向
{
case fangxiang.Up:
x += kuan / 2;//修改子弹生成位置
break;
case fangxiang.Down:
x += kuan / 2;
y += gao;
break;
case fangxiang.Left:
y += gao / 2;
break;
case fangxiang.Right:
y += gao / 2;
x += kuan;
break;
}
duixiangweizhi.zidan(x, y, zidanen.wanjia, Fangxiang);//传入修改后的point实例化子弹
}
这样子再次运行程序发射子弹就会发现位置刚刚好了
下节再说怎么让子弹动起来以及子弹超出边界的销毁