我正在制作一个平台游戏,我想从马里奥那里制作类似于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;
});