存储在内存中时位置无效?
Locations not valid when stored in memory?
我在让存储在 creep 内存中的位置正常工作时遇到了一些问题。例如,这段代码:
var sources = creep.room.find(FIND_SOURCES);
if(creep.memory.sourceLocationIndex == null) {
creep.memory.sourceLocationIndex = Math.floor(Math.random() * sources.length);
}
return sources[creep.memory.sourceLocationIndex];
完美运行,但是这段代码:
if(creep.memory.sourceLocation == null) {
var sources = creep.room.find(FIND_SOURCES);
var sourceLocationIndex = Math.floor(Math.random() * sources.length);
creep.memory.sourceLocation = sources[sourceLocationIndex];
}
return creep.memory.sourceLocation;
似乎一旦 creep 移动就会失败。为什么会发生这种情况?我应该做些什么不同的事情?
bame53 在我的 Reddit post 中给出了一个很好的答案:
https://www.reddit.com/r/screeps/comments/6jfjob/locations_not_valid_when_stored_in_memory/djdzgn1/
我花了很长时间才弄清楚,但是一旦你知道哪里出了问题,它为什么不起作用就很有意义了。
您不能在内存中存储游戏对象。
我看到其他人也使用的替代方法是存储 ID。
creep.memory.sourceId = sources[sourceLocationIndex].id;
以后
var source = Game.getObjectById(creep.memory.sourceId);
我在让存储在 creep 内存中的位置正常工作时遇到了一些问题。例如,这段代码:
var sources = creep.room.find(FIND_SOURCES);
if(creep.memory.sourceLocationIndex == null) {
creep.memory.sourceLocationIndex = Math.floor(Math.random() * sources.length);
}
return sources[creep.memory.sourceLocationIndex];
完美运行,但是这段代码:
if(creep.memory.sourceLocation == null) {
var sources = creep.room.find(FIND_SOURCES);
var sourceLocationIndex = Math.floor(Math.random() * sources.length);
creep.memory.sourceLocation = sources[sourceLocationIndex];
}
return creep.memory.sourceLocation;
似乎一旦 creep 移动就会失败。为什么会发生这种情况?我应该做些什么不同的事情?
bame53 在我的 Reddit post 中给出了一个很好的答案: https://www.reddit.com/r/screeps/comments/6jfjob/locations_not_valid_when_stored_in_memory/djdzgn1/
我花了很长时间才弄清楚,但是一旦你知道哪里出了问题,它为什么不起作用就很有意义了。
您不能在内存中存储游戏对象。
我看到其他人也使用的替代方法是存储 ID。
creep.memory.sourceId = sources[sourceLocationIndex].id;
以后
var source = Game.getObjectById(creep.memory.sourceId);