【问题标题】:Can Spawns in Screeps use memory?Screeps 中的 Spawns 可以使用内存吗?
【发布时间】:2018-03-09 00:37:46
【问题描述】:

Spawns 可以保留内存吗?我找不到准确的答案,我的代码显示 Spawns 不保留内存,这不是我在 API 和 Docs 中读到的。

http://screeps.wikia.com/wiki/Memory

我测试 Spawns 是否有内存的代码如下(有意义的摘录):

StructureSpawn.prototype.whatever = function() {
  this.memory.count = 12;
  console.log(this.memory.count);
}

现在,上面的代码,当由 main.js 运行时,确实返回 12,但是当我注释掉赋值行时,它会丢失值并返回 undefined。

我到底错过了什么?

我知道我不能在内存中存储对象,但是数字?!连字符串都没有?

顺便说一句,这都不起作用(从文档中复制)。

Game.spawns.Spawn1.memory.count = 12;

【问题讨论】:

    标签: memory screeps


    【解决方案1】:

    myspawn.memory 只是对 Memory.spawns[myspawn] 的引用。

    所有变量在输入时通过 JSON.stringify 运行,在输出时通过 JSON.parse 运行。

    let myobj= { 'hello' : 'world' }
    Games.spawns[myspawn].memory.remember= myobj;
    console.log(Games.spawns[myspawn].memory.remember.hello);
    

    相同
    let myobj= { 'hello' : 'world' }
    Memory.spawns[myspawn].remember= myobj;
    console.log(Memory.spawns[myspawn].remember.hello);
    

    为了进一步扩展,您可以在内存结构的任何位置创建变量,甚至在根上。在您的控制台中尝试复制粘贴

    Memory.foo = "bar";

    然后检查您的内存选项卡,并查看内存根目录。在内存选项卡中,您可以直接修改或完全删除它。

    您可能错误地处理了 spawn。尝试在控制台中输入这一系列命令,将“blech”替换为您的生成名称

    delete Game.spawns.blech.memory;  
    console.log(JSON.stringify(Game.spawns.blech.memory));    
    Game.spawns.blech.memory = {"Hello" : "World"}; 
    console.log(JSON.stringify(Game.spawns.blech.memory));
    

    【讨论】:

    • 谢谢帕特里克,所以如果我理解正确,你不会直接在对象 Spawn 上创建属性,例如: const spawn = Game.spawns[name]; spawn.memory.something = '某事';因为这似乎行不通。我做了更多试验,Creeps 可以在内存中存储任何有效的 json 条目(包括数组和对象),但 Spawns 并非如此。或者我可能以不正确的方式处理 Spawn,我会再次检查。不过谢谢你的建议。我也试试。
    • 我在上面的答案中添加了一些复制粘贴代码,因此您可以在控制台中验证内存是如何工作的。
    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多