Как убить пулю Оружия, попавшую во врага? Фазер 2.7.5

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

Я пытался использовать 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 не работает должным образом в этом? Почему враг становится невидимым?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
262
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

The two objects will be passed to this function in the same order in which you specified them, unless you are checking Group vs. Sprite, in which case Sprite will always be the first parameter.

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

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

}

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

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

Мужик, ты спас меня. Я не видел этой детали реализации в документах. Это решило мою проблему вообще, спасибо!

Vilson Rodrigues Junior 20.06.2019 17:29

Пожалуйста, всегда рад помочь! Этот фреймворк кажется забавным

Kaddath 20.06.2019 17:33

Другие вопросы по теме