在Screeps中,我这段代码不起作用:
var sources = creep.room.find(Game.FIND_SOURCES_ACTIVE);
它说:
Cannot read property 'find' of undefined
我一直在四处寻找,找不到任何其他寻找来源的方式。
我也注意到大多数其他人的代码都不起作用,甚至教程的代码在投入真实游戏时也不再有效。
答案 0 :(得分:1)
我无法完全确定您的问题,因为我没有完整的代码,但有一个问题可能是creep
未定义。
您需要在代码中的某个位置定义creep
,例如for循环,以循环播放游戏或房间中的每个小工具。
var roleMiner = require('role.miner') // role.miner being the module name for miner actions
for(var name in Game.creeps) {
var creep = Game.creeps[name];
//
// do whatever you wish with the current selected creep.
//
// most of the time you will call a module similar to what the tutorials suggest and put your actions for it in there
//
if(creep.memory.role == 'miner'){
roleMiner.run(creep); // passes the current selected creep to the run function in the module
}
}
因此,在您的roleMiner模块中,您将拥有定义矿工行为的内容。
var roleMiner = {
run: function(creep) {
// this one returns an array of the sources that are in the room with the creep
var sourcesRoom = creep.room.find(FIND_SOURCES);
// this one returns the source object which is closest to the creeps positon
var sourcesClose = creep.pos.findClosestByRange(FIND_SOURCES);
}
}
module.exports = roleMiner;
希望这有帮助。
答案 1 :(得分:1)
在每个游戏滴答之间共享数据时,爬行游戏具有某种...机制。 如果将任何东西存储在全局Memory对象中,则数据将丢失其所有原型。 要恢复原型,请使用Object.setPrototypeOf(creep,Creep.prototype)或根据您的蠕变ID创建新的Creep对象。
答案 2 :(得分:0)
我认为你在寻找的是:
var sources = creep.pos.findClosestByRange(Game.SOURCES);
或
var sources = creep.pos.findClosestByPath(Game.SOURCES);
答案 3 :(得分:0)
我是一个新玩家,不确定我的代码是否有效,我认为find方法将是这样的:
var sources = creep.room.find(FIND_SOURCES_ACTIVE)
creep将转向收集器的活动资源。