使用sprite.body.moveTo的对象的移动在碰撞时受到干扰

时间:2016-07-31 20:54:07

标签: phaser-framework

我正在制作一个平台游戏,我想从马里奥那里制作类似于Thwomp的东西。所以它只是一个在两点之间巡逻的敌人,任何与玩家的碰撞都会杀死玩家。

我是通过Phaser的sprite.body.moveTo来做到的。我需要检查敌人是否与玩家重叠,这样我才能触发玩家死亡。

问题在于,当玩家和敌人发生碰撞时,moveTo会搞砸,敌人的路径受阻。我拍了一段短片来演示会发生什么。 Video

这是我创造敌人时的代码。我使用Tiled中的一个对象组作为属性,这就是所有map.objects.mainObjecets[i]内容。

//demons is a phaser group with body enabled.
var demon = demons.create(map.objects.mainObjects[i].x,map.objects.mainObjects[i].y,'demon');
demon.direction = Number(map.objects.mainObjects[i].properties.direction);
demon.distance = Number(map.objects.mainObjects[i].properties.distance);
demon.duration = Number(map.objects.mainObjects[i].properties.duration);
//I tried using stopVelocityOnCollide and immovable to fix the problem, neither one worked
demon.body.stopVelocityOnCollide=false;
demon.body.immovable = true;
demon.body.onMoveComplete.add(moveDemon, this);
game.time.events.add(map.objects.mainObjects[i].properties.delay, function(a) {
    a.body.moveTo(a.duration, a.distance, a.direction);
}, this, demon);

以下是每次移动完成时运行的代码。

function moveDemon(demon) {
  game.time.events.add(Phaser.Timer.SECOND * .3, function() { //.3 second delay before moving
    demon.direction = 360-demon.direction;
    demon.body.moveTo(demon.duration, demon.distance, demon.direction);
  }, this);
}

最后,这是检查重叠的代码

this.physics.arcade.overlap(player,demons,function(){
  //This code just moves the player back to the spawn point.
  player.x = map.objects.spawn[0].x;
  player.y = map.objects.spawn[0].y;
});

0 个答案:

没有答案