Javascript 是否可以将函数挂钩分配给游戏对象,例如在init、death等上运行函数?

Javascript 是否可以将函数挂钩分配给游戏对象,例如在init、death等上运行函数?,javascript,screeps,Javascript,Screeps,我还没有找到任何方法为任何东西分配挂钩,如果可以的话,这将非常有用。另外,如何检查游戏对象是否仍然存在?(也就是说,没有因年老而死亡,也没有被敌人摧毁。)如果你的意思是通过API-还不可能。但你们可以改变你们的当前状态,并将其和记忆中的对象的前一个状态进行比较。例如,如果内存中的某个爬行名称仍然存在,但它在游戏中消失了。爬行,则发生了一些事情 for(var i in Game.creeps) { var creep = Game.creeps[i]; creep.memory.

我还没有找到任何方法为任何东西分配挂钩,如果可以的话,这将非常有用。另外,如何检查游戏对象是否仍然存在?(也就是说,没有因年老而死亡,也没有被敌人摧毁。)

如果你的意思是通过API-还不可能。但你们可以改变你们的当前状态,并将其和记忆中的对象的前一个状态进行比较。例如,如果
内存
中的某个爬行名称仍然存在,但它在
游戏中消失了。爬行
,则发生了一些事情

for(var i in Game.creeps) {
    var creep = Game.creeps[i];
    creep.memory.lastSeenAt = {x: creep.pos.x, y: creep.pos.y};
}

for(var i in Memory.creeps) {
    if(!Game.creeps[i]) {
        console.log("Oops! Something happened with a creep "+creep.name+" at "+
            Memory.creeps[i].lastSeenAt.x+","+Memory.creeps[i].lastSeenAt.y);
    }
}

我不这么认为。API似乎专注于为主游戏循环开发代码,比如在
中编写代码,而(true)
。例如,你可以让你的爬行动物在死前做些什么

我已经创建了一个防护模块(就像您在教程中创建的收割机模块一样)。下面的代码应该有效:

module.exports = function (creep) {
    if(creep.hits<=100) { Game.spawns.Spawn1.createCreep([Game.ATTACK, Game.ATTACK, Game.TOUGH, Game.TOUGH, Game.MOVE], "guard2", {role:"guard"}); }

    var targets = creep.room.find(Game.HOSTILE_CREEPS);
    if(targets.length) {
        creep.moveTo(targets[0]);
        creep.attack(targets[0]);
    } else{
        creep.moveTo(Game.spawns.Spawn1);
    }
}
module.exports=函数(蠕变){
if(screw.hits这是我的用例:

  • 计算当前房间中的敌人数量(N)
  • 计算活动防护装置的数量(C)
  • 如果C 过了一段时间,当使用
    房间.find(Game.MY_CREEPS)
    时,我也会得到死掉的守卫。要一直过滤它们真的很痛苦,全局
    内存
    会继续列出它们。有没有办法从全局
    内存
    对象中删除死掉的怪物

    [编辑] 找到这个,希望能有所帮助

    for(var i in Memory.creeps) {
        if(!Game.creeps[i]) {
            delete Memory.creeps[i];
        }
    }
    

    我在每次勾选开始时运行它

    我分叉了脚本示例存储库,并生成了自己的事件处理代码-


    使用该脚本,您可以将初始化、更新和销毁方法分配给事件,而不必更加笨拙地处理事情。

    在这种情况下,条件“如果(screw.hitsGood问题,我将检查并回答此问题,因为我已经创建了一个保护模块(更新了答案)并且出于某种原因”如果(screw.hits
    screw.hits很好,但它的阈值更高。结果是我第一次尝试时耗尽了能量,所以游戏没有产生更多的爬行。谢谢!目前有没有任何方法可以检查死亡,而不必在最坏情况下遍历游戏中的所有爬行?还没有,但我们正在考虑某种事件存储。我们可能会我希望以后再添加。不过,在爬行过程中进行迭代并不是真正的CPU消耗操作。