自学内容网 自学内容网

项目-坦克大战学习-控制人机发射子弹以及玩家受到攻击

控制人机发射子弹有几个条件,发射子弹的间隔以及攻击对象的筛选

我们前面已经将子弹生成程序写出来了,在子弹类中我们定义了枚举类型用来分辨是谁发射出来的子弹

玩家发射出来的子弹定义:

 duixiangweizhi.zidan(x, y, zidanen.wanjia, Fangxiang);//传入修改后的point实例化子弹标签为wanjia

人机发射出来的子弹定义:

duixiangweizhi.zidan(x, y, zidanen.renji, Fangxiang);//传入修改后的point调整子弹生成位置标签为人机

我们需要设置一个方法让子弹发射有间隔,可以在子弹类中设置一个计数器,每运行一帧计数器加一,当计数器变为我们设定的时间时运行子弹生成方法然后将计数器重置

private void zidanshengcheng()//子弹生成设置
    {
    fs++;
    if (fs == 100)
    {
        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.renji, Fangxiang);//传入修改后的point调整子弹生成位置标签为人机
        fs = 0;
    }

然后需要控制子弹攻击到的对象,在对象位置类中我们之前就定义了人机的碰撞检测,然后可以在定义一个玩家的碰撞检测

public static wanjia wanjiapengzhuang(Rectangle re)//检测玩家是否发生碰撞
{
    {
        if(tank.getjuxing().IntersectsWith(re))
        {
            return tank;
        }
        return null;
    }
}

在子弹类中我们有子弹碰撞到人机的方法,可以在方法前加一个前置条件,如果当前子弹的标签为wanjia才能运行碰撞程序,否则无视碰撞

 if (zd == zidanen.wanjia)//如果是玩家发射的子弹
 {
     if ((rg=duixiangweizhi.renjipengzhuang(rec))!=null)//检测碰撞到人机
     {
    
         duixiangweizhi.boom(boomx, boomy);//爆炸特效
         xiaohui = true;

         duixiangweizhi.renjixiaohui(rg); return;
     }
 }

玩家被攻击的道理相同,不过不同的是玩家被攻击了不会销毁,而是扣除hp值,直到玩家hp值被扣完就会将玩家的位置重置

 if(zd==zidanen.renji)//如果子弹是由人机发射出
 {
     if(duixiangweizhi.wanjiapengzhuang(rec) != null)
     {
         duixiangweizhi.boom(boomx, boomy);//爆炸特效
         xiaohui = true;
         wanjia.hp--;//玩家血量减少
     }
     
 }

在玩家类需要定义一个初始hp,当hp扣完后就会运行方法使玩家位置重置血量重置

public  void Hp()//血量检测
{
    if(hp==0)
    {
        x = 5*30;
        y = 14*30;
        hp = 2;
    }
}


原文地址:https://blog.csdn.net/2401_84659046/article/details/142712440

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!