我有一个关于精灵自主运动的问题,也就是说,从某些条件中以最简单和最佳的方式调动地图。
假设我有一个Phaser.Group的7个精灵在迷宫中移动(TileMap)并且必须越过它,不一定要到达特定的目标(如Pacman的幽灵)但是当他们到达十字路口时选择一条路径随机的。我通过以下方式执行此操作:在 update()中,我调用函数“mobilizeSprite()”,此函数包含一个在整个组中运行的ForEach循环,在循环我必须比较精灵的坐标和数组的坐标,如果它们在这一个那么它意味着在这个位置你可以选择一个随机的路径(向上,向下,向左或向右)但它然后它以前的方式
我的代码真的是最佳的吗?因为如果我向组中添加更多精灵,那么消耗将会大得多,而这在函数 update()中就可以了,是否有更简单的方法?我想为每个精灵(如调度程序)添加一个计时器绕过ForEach,但是我不知道这是否可能。
这里是代码:
...
update: function() {
movilizeSprite();
}
...
mobilizeSprite: function() {
this._enemies.forEach(function(enemy) {
if (enemy.name == 'ship') {
var position = Math.round(enemy.body.x)+','+Math.round(enemy.body.y),
index = this._crossroads.indexOf(position);
if ((index != -1 && index % 2 == 0) || enemy.body.speed == 0) {
enemy.body.velocity.x = 0;
enemy.body.velocity.y = 0;
this._movements[this.rnd.integerInRange(0, (this._movements.length-1))](enemy);
}
}
}, this);
}
this._movements:这是一个包含四个函数的数组,每个函数作为参数接收精灵并动员它,如果索引为0则调动它到右边,如果它是1然后将它移到左边等...
this._crossroads:这是一个坐标为所有十字路口和航点的数组,这种安排对于了解精灵是否可以采用另一条路径至关重要。问题是十字路口的位置是偶数指数(x%2): 0,2,4,6 ...