在上一篇文章中我们介绍了做弹出框和列表框,还有用云函数做了一个简单的排行榜,今天我们来说一说战斗相关的内容。

首先我们先获取缓存数据中的关卡数值,然后根据关卡数值判断是否是BOSS关。如果关卡数值是10倍数的话则是BOSS关卡,BOSS关卡的schedule只执行一次,所以最后一个参数是0。
if (this.levelNum % 10 == 0) {//如果是BOSS关卡
this.remainEnemy = 1;
this.schedule(this.makeEnemyAndBoss, this.enemyCreateTime, 0);
this.enemyNumberBar.node.active = false; //开始游戏后敌人条可见
//this.bossNumberBar.node.active = true; //开始游戏后敌人条可见
}
else {
this.remainEnemy = this.levelNum + 10
this.schedule(this.makeEnemyAndBoss, this.enemyCreateTime, macro.REPEAT_FOREVER);
this.enemyNumberBar.node.active = true; //开始游戏后敌人条可见
this.bossNumberBar.node.active = false; //开始游戏后敌人条可见
}
创建BOSS函数也比较简单,根据BOSS的类型来从BOSS工厂中新建BOSS。
makeBOSS(BossType: enemyTypeEnum) {
const playerNode = this.node.getChildByName('player')
let playerwidth = playerNode.getComponent(UITransform).contentSize.width;
let enemyTemp: Node = null;
switch (BossType) {
case enemyTypeEnum.BOSS1:
enemyTemp = this.enemyBossFactory.createProduct(BossType);
break;
case enemyTypeEnum.BOSS2:
enemyTemp = this.enemyBoss2Factory.createProduct(BossType);
break;
case enemyTypeEnum.BOSS3:
enemyTemp = this.enemyBoss3Factory.createProduct(BossType);
break;
case enemyTypeEnum.BOSS4:
enemyTemp = this.enemyBoss4Factory.createProduct(BossType);
break;
}
//根据这个可以动态调整敌机的战斗力
//console.log(enemyTemp.getComponent(bossBase).startImpactAttack)
enemyTemp.name = 'Enemy';
enemyTemp.setParent(this.node)
let v2 = this.randomPosition((common.viewWidth - playerwidth) / 2, -(common.viewWidth - playerwidth) / 2)
enemyTemp.setPosition(v2.x, v2.y);
}
在初始化敌人之前,先根据关卡数值判断敌人类型,敌人类型在枚举类中定义。

那么如何来判断关卡是否结束了呢?我们先定义一个KillEnemy函数,在敌人管理类中判断敌人的血量,如果小于0则调用这个函数。然后再更新关卡的敌人数量进度条的时候,判断已经死亡的敌人数量和总共需要生成的敌人数量的差值,小于零的话就说明关卡结束。然后做一些保存关卡记录、增加金币数量、停止玩家射击等操作。

战斗结束以后写了一个基础的tween函数,让飞机飞到指定的地点。
successFly(node: Node) {
//物理碰撞失效
node.getComponent(BoxCollider2D).enabled = false;
const height = view.getVisibleSize().height
tween(node)
.to(3, { position: new Vec3(0, height / 2 - 200, 0) }, { // 这里以node的位置信息坐标缓动的目标
easing: "elasticOut", // 缓动函数,可以使用已有的,也可以传入自定义的函数。
})
.start();
}
无尽模式的战斗脚本也是类似,区别在于一个schedule是macro.REPEAT_FOREVER无限循环的。在玩家脚本中,如果是无尽模式的话再判断获得的分数,调用云函数看看是否超过自己以往的最高分,如果是则更新。

好了今天就先说这么多,对了记得来体验一下这款小游戏哦,打不过的话一定要升级装备!

&spm=1001.2101.3001.11974&articleId=130719209&d=1&t=3&u=9fd2f346b5314f6cb2da2b39abdac6f9)
6267


&spm=1001.2101.3001.11976&articleId=130719209&d=1&t=3&u=3f2a6e48adff4eb1b9ba3f029f70e5e6)

被折叠的 条评论
为什么被折叠?



