繁体   English   中英

是否可以为游戏对象分配函数钩子,例如在init,death等上运行函数?

[英]Is it possible to assign function hooks to game objects, e.g. run function on init, death, etc?

我还没有找到任何方法来为任何东西分配钩子,如果可以的话,它会非常有用。 另外,如何检查游戏对象是否仍然存在? (即没有死于年龄,也没有被敌人摧毁。)

如果你的意思是通过API - 还不是。 但是您可以更改当前状态并将其与记忆的对象先前状态进行比较。 例如,如果Memory一些蠕变名称仍然存在,但它在Game.creeps消失了,那么就发生了一些事情。

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);
    }
}

这是我的用例:

  1. 计算当前房间中的敌人数量(N)
  2. 计算活着的守卫人数(C)
  3. 如果C <N那么建立另一个后卫

过了一会儿,当使用Room.find(Game.MY_CREEPS) ,我也会得到死警卫。 必须一直过滤它们真的很痛苦,全局Memory继续列出它们。 有没有办法从全局Memory对象中删除死亡的小兵?

[编辑]发现这一点,希望它会有所帮助。

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

我在每个滴答开始时运行它

我分叉了脚本示例存储库并制作了我自己的事件处理代码 - https://github.com/pineapplemachine/script-samples/tree/master/hooks

使用该脚本,您可以为事件分配初始化,更新和销毁方法,而不必更加迟钝地处理事务。

我不这么认为。 API似乎专注于为主游戏循环开发代码,比如在一段while(true)内编写代码while(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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM