screeps - 添加然后访问控制器上的内存
问题描述
if (this.controller && !this.controller.memory) this.controller.memory = { containerid: null, linkid: null };
后来我有这个:
if (creep.room.controller.memory) {//do code}
出于某种原因,当我尝试从蠕变中访问它时它失败了(我遇到了 else 条件)我错过了什么?
解决方案
控制器在 Creeps 等属性中没有内存简写。
像 Screeps 中的大多数东西一样,StructureController 没有内存。查看 Screeps 文档
您必须将 Creeps、Rooms、Spawns 记录到内存中,以及所有其他内容!Screeps 对象(如 Creeps、Spawns 等)不会将内存存储在它们自己的属性中,而是存储在 Memory Object 中。
不要像你试图做的那样向对象添加内存!这是一个陷阱!我建议你在他的房间内存中写控制器内存。
Memory.rooms[controller.room.name]
我不知道你如何访问你的控制器。如果您使用 Room 名称访问 Controller:
// Your Room. Random example: "E12N36"
let room = Game.rooms[room_name]
let controller = room.controller
// Add into the Room Memory your information about/for/with controller
room.memory.controllerOfRilcon = {
name: "Not",
sure_name: "Sure",
NumberOfPokeballs: "FullOfBits",
Nanani: "Done",
Nanana: "TryToThink"
}
您可以在文档中看到非常重要的一点 Memory 如何工作Documentation-CreepMemory
Game.creeps[name].memory只是访问 Object Memory.creeps[name]的简写。对象存储器包含存储器的真实数据。
对象中没有内存!
推荐阅读
- javascript - React 使用 React.memo 给 Child 错误的索引
- swift - UILabeltext siwft 的自动收缩字体大小
- laravel - 修改使用 Route::apiResource 生成的 URL 而不更改名称
- css - Three.js CSS3D 渲染器 YouTube 问题
- flutter - 我只能在模拟器上查看 PDF 文件,而不能在 Flutter 应用程序中的真实设备上查看
- java - 组序列验证。首先应验证属性,然后验证类
- java - 单个 API 和另一个后端之间的微服务项目
- html - 如何将变量传递到 html 模板并将它们用作 img 源
- linux - 使用 cat 命令显示颜色
- python - 与 def main() 混淆