大家好,我正在制作一款简单的游戏,其中包含竞技场中的两名玩家 每个玩家都有一个发射子弹的武器。 我想要的是,每当弹丸击中一个方块或一个敌人时,它的hp降低1,而碰到该敌人或该方块的子弹就会消失。
我尝试使用Lifespan杀死子弹(当子弹与敌人重叠时,lifespan = 0),但没有成功。
我正在使用bullet.kill()
,但似乎也无法使用。
我是如何制造武器的:
weapon = game.add.weapon(10, 'bullet');
weapon.bulletKillType = Phaser.Weapon.KILL_WORLD_BOUNDS; weapon.bulletSpeed = 200;
weapon.fireRate = 1000;
weapon.trackSprite(this.player, 0, 0, false);
weapon2 = game.add.weapon(10, 'bullet');
weapon2.bulletKillType = Phaser.Weapon.KILL_WORLD_BOUNDS;
weapon2.bulletSpeed = 200;
weapon2.fireRate = 1000;
weapon2.trackSprite(this.player2, 0, 0, false);
崩溃:
game.physics.arcade.overlap(weapon.bullets, this.player2, this.hitP2, null, this);
game.physics.arcade.overlap(weapon.bullets, this.blocks, this.hitBlock1, null, this);
game.physics.arcade.overlap(weapon2.bullets, this.player, this.hitP1, null, this);
game.physics.arcade.overlap(weapon2.bullets, this.blocks, this.hitBlock2, null, this);
命中功能:
hitBlock: function(bul, blk){
bul.kill();
},
hitP: function(bul, enm){
// sfx de acerto
p1HP -= 1;
this.txtP1HP.text = 'P1 HP: ' + p1HP;
bul.kill();
if(p1HP < 1){
this.player.kill();
}, this);
现在发生的是,当子弹击中敌人时,他变得隐形并且子弹仍在运行直到越界。
为什么kill方法在此方法中无法正常工作? 为什么敌人变得隐形?
答案 0 :(得分:0)
我不了解Phaser,但我很感兴趣,因此,通过检查the overlap docs可以看到:
这两个对象将按照指定它们的顺序传递给此函数,除非您正在检查“组vs.精灵”,在这种情况下,“精灵”始终是第一个参数。
您显然声明与组重叠,因此您需要交换参数,子画面将始终是第一个参数。玩家消失是因为您杀死了它而不是子弹:
hitBlock: function(blk, bul){ //instead of (bul, blk)
bul.kill();
},
hitP: function(enm, bul){ //instead of (bul, enm)
// sfx de acerto
p1HP -= 1;
this.txtP1HP.text = 'P1 HP: ' + p1HP;
bul.kill();
if(p1HP < 1){
this.player.kill();
}
}
我不确定它会有效地杀死子弹,因为第二个参数可能是子弹组,而不是有效重叠的子弹组。
希望有帮助!