如何杀死击中敌人的武器子弹?移相器2.7.5

时间:2019-06-20 14:09:50

标签: javascript phaser-framework

大家好,我正在制作一款简单的游戏,其中包含竞技场中的两名玩家 每个玩家都有一个发射子弹的武器。 我想要的是,每当弹丸击中一个方块或一个敌人时,它的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方法在此方法中无法正常工作? 为什么敌人变得隐形?

1 个答案:

答案 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();
    }

}

我不确定它会有效地杀死子弹,因为第二个参数可能是子弹组,而不是有效重叠的子弹组。

希望有帮助!