在上一篇文章中我们讲了敌人基类的写法,今天我们来讲一下玩家子弹的管理类。
首先在onload函数内获取武器的数据
this.mainWeapon = JSON.parse(sys.localStorage.getItem("mainWeapon")); // 获取主武器数据
检测到有碰撞后就减少敌人的血量,这里由于敌人中的普通敌人和BOSS用了不同类型的基类,所以我们可以根据碰撞的tag来判断:我这里把所有BOSS的tag设置成了99。
然后我们就可以在onBeginContact中来判断:
if (otherCollider.tag == 99) {
if (selfCollider.name.indexOf('bullet') != -1) {
otherCollider.node.getComponent(bossBase).varHealth -= this.mainWeapon.mainWeapon.attackNumber;
在update函数里我们需要写子弹的位置更新代码,这里戒戒分享两个简单的函数,一个是在Y轴向上飞的普通子弹:
还有一个就是稍微复杂一些的跟踪导弹:
这里我们先查找子节点中名称叫Enemy的子节点,然后获取这个子节点的位置,再获取到子弹指向敌机的单位向量。然后让子弹位置和夹角也随着向量的改变而改变。
this.curPos.x += normalizeVec.x * this.persistNode.getComponent(PersistNode).missileBulletMoveSpeed * deltaTime; //子弹沿着单位向量移动
this.curPos.y += normalizeVec.y * this.persistNode.getComponent(PersistNode).missileBulletMoveSpeed * deltaTime;
this.node.setPosition(this.curPos);
还要判断没有敌机存在的情况,这似乎后就跟普通子弹一样向上移动。这里有一点我们取的敌机永远是最后增加到游戏的那个,这里也可以根据要求去实现一些自己的逻辑。比如把敌人节点分类,有BOSS优先攻击等等。
this.curPos.y += this.persistNode.getComponent(PersistNode).missileBulletMoveSpeed * deltaTime;
好了今天就先说这么多,对了记得来体验一下这款小游戏哦,打不过的话一定要升级装备!期待你来拿个排行榜!