Привет, ребята, я делаю эту простую игру, состоящую из двух игроков на арене. У каждого игрока есть оружие, которое стреляет снарядом. Я хочу, чтобы каждый раз, когда снаряд попадал в блок или врага, его здоровье уменьшалось на 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 не работает должным образом в этом? Почему враг становится невидимым?
Я не знаю 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();
}
}
Я не уверен, что это эффективно убьет пулю, потому что второй параметр может быть группой пули, а не той, которая эффективно перекрывается.
Надеюсь, это поможет!
Пожалуйста, всегда рад помочь! Этот фреймворк кажется забавным
Мужик, ты спас меня. Я не видел этой детали реализации в документах. Это решило мою проблему вообще, спасибо!