Screeps中Spawn是否支持内存使用与持久化?技术问询
关于Screeps中Spawn内存持久化的问题解答
嘿,我完全懂你的困惑——刚摸Screeps内存系统的时候很容易踩这个坑!问题其实出在你对内存存储位置的误解上:
Screeps里的Spawn实例(包括Creep、Room这类游戏内实体)都是每个tick重新生成的临时对象,你直接给它们加的属性(比如spawn.myNumber = 12)只在当前tick有效,tick结束后实例就被销毁了,这些临时属性自然跟着消失,这就是为啥你注释赋值语句后会拿到undefined。
而官方文档里说的Memory,指的是全局的Memory对象——只有存在这个对象下的数据才会在tick之间持久化保存。想要给Spawn存持久化内存,得把数据放在Memory.spawns(或自定义的Memory子对象)里,还要绑定Spawn的唯一标识(一般用name属性)。
给你举个正确的实现例子:
// 赋值持久化内存的代码 const mySpawn = Game.spawns['Spawn1']; // 先初始化该Spawn对应的内存对象(避免首次访问报错) if (!Memory.spawns) Memory.spawns = {}; if (!Memory.spawns[mySpawn.name]) { Memory.spawns[mySpawn.name] = {}; } // 存储数字(或其他合法数据) Memory.spawns[mySpawn.name].testNum = 12; // 后续tick读取内存的代码 const mySpawn = Game.spawns['Spawn1']; console.log(Memory.spawns[mySpawn.name].testNum); // 会稳定输出12
补充一句:Memory里确实不能存函数、循环引用的对象,但数字、字符串、普通嵌套对象这些完全没问题——你之前的测试只是存在了错误的位置,不是数字不能存哦。
内容的提问来源于stack exchange,提问作者Carlo Rizzante
相关产品推荐
相关产品推荐

