如何让screep找到来源?

时间:2017-01-17 21:16:02

标签: javascript screeps

在Screeps中,我这段代码不起作用:

var sources = creep.room.find(Game.FIND_SOURCES_ACTIVE);

它说:

Cannot read property 'find' of undefined

我一直在四处寻找,找不到任何其他寻找来源的方式。

我也注意到大多数其他人的代码都不起作用,甚至教程的代码在投入真实游戏时也不再有效。

4 个答案:

答案 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将转向收集器的活动资源。