Как убить Оружейную пулю, поразившую врага? Phaser 2.7.5 - PullRequest
0 голосов
/ 20 июня 2019

Привет, ребята. Я делаю эту простую игру, состоящую из двух игроков на арене. У каждого игрока есть оружие, которое стреляет снарядом.Я хочу, чтобы каждый раз, когда снаряд поражал блок или врага, его hp уменьшается на 1, а пуля, которая касалась врага или блока, исчезала.

Я пытался использовать продолжительность жизни, чтобы убить пулю (продолжительность жизни= 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 голосов
/ 20 июня 2019

Я не знаю Phaser, но мне интересно, поэтому, проверяя документы на перекрытия , он заявляет:

Два объекта будут переданы в эту функцию в том же порядке, в котором вы их указали, если только вы не проверяете Группу против Sprite, в этом случае Sprite всегда будет первым параметром.

Вы, очевидно, объявляете перекрытие с группой, поэтому вам нужно поменять местами свои аргументы, спрайт всегда будет первым параметром. Игрок исчез, потому что вы убили его вместо пули:

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

}

Я не уверен, что это эффективно убьет пулю, потому что вторым параметром может быть группа маркеров вместо того, который эффективно перекрывается.

Надеюсь, это поможет!

...