开启掘金成长之旅!这是我参与「掘金日新计划 · 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)注意记得引用
(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
(2)设置enemyBlood的参数,Position的y设置为20,Content Size设置为100,Total Length设置为100,Progress设置为1
(3)设置Bar的参数,Position的x设置为-50,Content Size设置为100,颜色color设置为绿色。
(4)最后记得要保存
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;
今天就到这里了,主要完善了玩家飞机和敌机血条的功能。下次我们说下物资功能。可能写的过程中还有很多不好的地方,希望大家能指出来,在此,谢谢大家