javascript - Screeps:获取对象的 id

标签 javascript screeps

我尝试编写一段代码,防止 2 个 Creep(收割机)前往同一目的地,并将它们绑定(bind)到该目的地,直到目的地满为止。

在第 55 行我收到一个可以理解的错误

55:creep.memory.targetID=targets[checkTarget].id; 由于我没有看到目标[checkTarget] 为 null

谁能告诉我我做错了什么?

var roleHarvester = {

    /** @param {Creep} creep **/
    run: function(creep) {
        if (!creep.memory.targetID) creep.memory.targetID = "not given";
        console.log(creep.memory.targetID);
        if (creep.carry.energy < creep.carryCapacity) {
            var nearestSource = creep.pos.findClosestByPath(FIND_SOURCES_ACTIVE);
            if (creep.harvest(nearestSource) == ERR_NOT_IN_RANGE) {
                creep.moveTo(nearestSource, {
                    visualizePathStyle: {
                        stroke: '#ffaa00'
                    }
                });
            }
        } else {
            if (creep.memory.targetID != "not given") {
                console.log("should not be not given");
                if (Game.getObjectById(creep.memory.targetID).hits == Game.getObjectById(creep.memory.targetID).hitsMax) {
                    creep.memory.targetID = "not given";

                    var targets = creep.room.find(FIND_STRUCTURES, {
                        filter: (structure) => {
                            return (structure.structureType == STRUCTURE_SPAWN ||
                                structure.structureType == STRUCTURE_EXTENSION ||
                                structure.structureType == STRUCTURE_TOWER) && structure.energy < structure.energyCapacity;
                        }
                    });
                } else {
                    if (creep.transfer(Game.getObjectById(creep.memory.targetID), RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
                        creep.moveTo(Game.getObjectById(creep.memory.targetID), {
                            visualizePathStyle: {
                                stroke: '#ffffff'
                            }
                        });
                    }
                }
            } else {
                var targets = creep.room.find(FIND_STRUCTURES, {
                    filter: (structure) => {
                        return (structure.structureType == STRUCTURE_SPAWN ||
                            structure.structureType == STRUCTURE_EXTENSION ||
                            structure.structureType == STRUCTURE_TOWER) && structure.energy < structure.energyCapacity;
                    }
                });
                console.log(targets);
                for (var checkTarget in targets) {
                    console.log(checkTarget);
                    console.log(targets[checkTarget]);
                    for (var name in Game.creeps) {
                        if (targets[checkTarget] = Game.getObjectById(Game.creeps[name].memory.targetID)) {
                            var fail = true;
                            break;
                        }
                        var fail = false;
                    }
                    if (fail == true) continue;

                    console.log(Game.getObjectById(targets[checkTarget]));
                    creep.memory.targetID = targets[checkTarget].id;
                    break;

                }
            }
        }
    }
};

module.exports = roleHarvester;

最佳答案

以下 if 条件有问题:

for(var name in Game.creeps) {
   if(targets[checkTarget] = Game.getObjectById(Game.creeps[name].memory.targetID)){

您的意思可能是 ==

关于javascript - Screeps:获取对象的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48349879/

相关文章:

javascript - 我如何使用 MarkerWithLabel 中的 labelContent 访问值,它们之间有空间

javascript - 删除控制框和图像之间的填充。 Fabric.js

javascript - 优化我的模型/ View ,显示简单的项目列表

javascript - 过滤器选项中的逻辑运算符

node.js - 安装 screepsmod-mongo 并运行 npx screeps start 后权限被拒绝

javascript - 可以在 Screeps 中获取行号或堆栈跟踪吗?

javascript - 显示 _id 的转换错误,但 id 从未使用过 Node js

javascript - 从数据库中检索后解码 base64 图像失败

javascript - 如何使用transferEnergy(creep)瞄准房间 Controller

javascript - 如何与来自 Cheerp/js 的外部变量交互?