从0开始用CocosCreator开发飞机大战小游戏(十一)

129 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

上一次说到血条的一些基本设置,今天我们继续来完善它。

1. 设置血条

(1)打开play.ts脚本,定义飞机当前血量和飞机总血量

planeBlood:number=0//飞机当前血量

    planeTotalBlood:number=0;//飞机总血量

  (2)在onLoad函数里设置当前血量和飞机总血量

  this.planeBlood=100;

  this.planeTotalBlood=100;

2. 更新血条

(1)打开enemyBullet.ts脚本。在onLoad函数里注册碰撞回调函数

      let collider=this.node.getComponent(Collider2D)

        if(collider){

            collider.on(Contact2DType.BEGIN_CONTACT,this.onBeginContact,this)

        }

(2)注意记得引用 image.png

(3)添加碰撞回调函数

    onBeginContact(selfCollider:Collider2D,otherCollider:Collider2D,contact:IPhysics2DContact | null){

        if(this.enemyBulletType==global.ENEMY_BULLET_1){

            otherCollider.getComponent(play).planeBlood-=10

        }else{

            otherCollider.getComponent(play).planeBlood-=20

        }       otherCollider.node.getChildByName("blood").getComponent(ProgressBar).progress=otherCollider.getComponent(play).planeBlood/otherCollider.getComponent(play).planeTotalBlood  

        this.enemyBulletFactory.recycleProduct(this.node)

    }

3. 接下来为敌机添加血条功能。

(1)打开预制体enemy,创建一个ProgressBar(进度) ,并且命名为enemyBlood image.png

(2)设置enemyBlood的参数,Position的y设置为20,Content Size设置为100,Total Length设置为100,Progress设置为1

image.png

(3)设置Bar的参数,Position的x设置为-50,Content Size设置为100,颜色color设置为绿色。 image.png

(4)最后记得要保存 image.png

4. 打开enemy.ts脚本

(1) 定义敌机总血量和敌机当前血量

    enemyTotalBlood:number=0; //敌机总血量

    enemyBlood:number=0; //敌机当前血量

(2)在onLoad 函数给敌机总血量赋值

        this.enemyTotalBlood=100;

     this.enemyBlood=100;

(3)在init函数里初始化敌机当前血量

        //初始化敌机血量

        this.enemyBlood=100;

        this.node.getChildByName("enemyBlood").getComponent(ProgressBar).progress=1;

5. 打开playerBullet.ts脚本

 (1)分别定义普通子弹,激光子弹,导弹子弹击中敌机掉多少血

   playerNormalReduce:number=0;//被普通子弹击中,敌机掉多少血

    playerLightReduce:number=0;//被激光子弹击中,敌机掉多少血

    playerBulletReduce:number=0;//被导弹子弹击中,敌机掉多少血

(2)在碰撞函数onBeginContact对被击中的敌机的血量减少进行操作,不同的子弹对敌机的血量减少不一样。

        if(this.playerBulletType==global.NORMAL_BULLET){

            otherCollider.getComponent(enemy).enemyBlood-=this.playerNormalReduce;

        }else if(this.playerBulletType==global.LIGHT_BULLET){

            otherCollider.getComponent(enemy).enemyBlood-=this.playerLightReduce;

        }else if(this.playerBulletType==global.MISSILE_BULLET){

            otherCollider.getComponent(enemy).enemyBlood-=this.playerBulletReduce;

        }

     //更新血条       otherCollider.node.getChildByName("enemyBlood").getComponent(ProgressBar).progress=otherCollider.getComponent(enemy).enemyBlood/otherCollider.getComponent(enemy).enemyTotalBlood;

今天就到这里了,主要完善了玩家飞机和敌机血条的功能。下次我们说下物资功能。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家