Подкалиберная пуля Phaser 3 попала несколько раз

для игры я пытаюсь сделать пули, которые пронзают врагов, что само по себе довольно просто благодаря функции перекрытия(). Моя проблема в том, что пули поражают врагов несколько раз и в конце мгновенно убивают их.

Есть ли способ сказать удар/столкновение только один раз для каждого врага?

Мое столкновение:

this.scene.physics.add.overlap(
     this.scene.enemyGroup, 
     this.scene.playerProjectiles_PierceEnemies, 
     function (enemy, projectile) {
          enemy.health -= projectile.dmg;
          if (enemy.health == 0) {
              enemy.destroy();
          }
     });

person Kiroho    schedule 24.03.2021    source источник


Ответы (1)


Вы можете добавить атрибут is_live к пуле и при столкновении обновить атрибут до false, а затем в вашей функции перекрытия () проверять только живые пули.

person Francesco    schedule 24.03.2021
comment
Я думаю, что пробовал подобные вещи, установив dmg моей пули (dmg - это атрибут пули) на 0 после первого столкновения. Проблема заключалась в том, что пуля не могла попасть в других мобов (фактически попала с нулевым уроном). - person Kiroho; 24.03.2021
comment
Затем, возможно, есть атрибут, который хранит, каких мобов он ударил, и если моб уже был поражен, то урон не наносится, иначе наносится урон. В качестве альтернативы, вы можете вычислить количество времени, которое должно пройти, чтобы пуля больше не запускала функцию перекрытия, а затем снова заставить пулю жить или сразу после того, как она попала в моба, переместить ее за пределы моба. - person Francesco; 24.03.2021
comment
Ваша идея иметь атрибут, который хранит моба, сработала. Я дал своему снаряду атрибут, в котором хранится вражеский объект, в который он попал (с точки зрения производительности, возможно, было бы плохой идеей хранить весь объект, я мог бы изменить его позже на идентификаторы). Также мне приходилось сбрасывать этот атрибут (устанавливать значение null) всякий раз, когда снаряд уничтожался, я думаю, это из-за того, как я создаю свои снаряды. Однако это работало нормально, за исключением одного. - person Kiroho; 24.03.2021
comment
Всякий раз, когда два или более врага находились рядом или перекрывались, атрибут снарядов, переключаемый между ними, снова убивал их. Я исправил это, превратив свой атрибут снаряда в массив и добавив всех недавно пораженных врагов, и спросил, являются ли какие-либо элементы текущим пораженным. Теперь он работает именно так, как я хотел, спасибо. - person Kiroho; 24.03.2021
comment
Большой! Рад помочь! - person Francesco; 24.03.2021