首页 > 解决方案 > 添加然后访问控制器上的内存

问题描述

if (this.controller && !this.controller.memory) this.controller.memory = { containerid: null, linkid: null };

后来我有这个:

if (creep.room.controller.memory) {//do code}

出于某种原因,当我尝试从蠕变中访问它时它失败了(我遇到了 else 条件)我错过了什么?

标签: screeps

解决方案


控制器在 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]的简写。对象存储器包含存储器的真实数据。

对象中没有内存!


推荐阅读