Screeps内置函数不返回预期类型

时间:2016-07-10 11:42:04

标签: javascript screeps

在游戏Screeps中,我遇到了一些内置函数返回类型的问题。请使用以下代码:

var creeps1 = Game.creeps
var room = Game.rooms[myRoomName];
var creeps2 = room.find(FIND_CREEPS);

console.log(creeps1.constructor.name);
console.log(creeps1 instanceof Array);

console.log(creeps2.constructor.name);
console.log(creeps2 instanceof Array);

console.log([].constructor.name);
console.log([] instanceof Array);

你希望这些都是数组,所以都是Array的实例。然而,在世界游戏中,我得到以下结果(myRoomName设置为我有权访问的房间的名称):

// Results in world
[1:11:11 AM] Object
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] true

但等等,它变得更加怪异。当我在模拟中运行相同的代码时(此时myRoomName'sim'),我得到以下结果:

// Results in simulation
[1:11:11 AM] Object
[1:11:11 AM] false
[1:11:11 AM] Array
[1:11:11 AM] true
[1:11:11 AM] Array
[1:11:11 AM] true

为什么并非所有这些函数都返回Array的实例?世界环境中甚至有Array的不同版本?有没有办法将结果转换为Array

的实例

1 个答案:

答案 0 :(得分:1)

Game.creeps不返回数组,它返回一个表现为哈希的对象,其中creep名称是键,creep是值。这在API for Game.creeps中有记录。如果您需要将它放在数组中,则可以遍历该对象并将条目附加到数组中。

至于为什么creeps2 instanceof在模拟中与实际游戏不同,很难说。但是,Array.isArray(creeps2)似乎在两个环境之间保持一致(在两个实例中都返回true)。