4

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

4

4 回答 4

4

如果您的意思是通过 API - 还不可能。但是您可以更改当前状态并将其与记忆的对象先前状态进行比较。例如,如果某个cree name inMemory仍然存在,但它在 中消失了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);
    }
}
于 2014-11-21T16:12:32.890 回答
3

这是我的用例:

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

我在每个刻度开始时运行它

于 2014-11-21T22:49:38.177 回答
1

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

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

于 2014-11-24T12:43:44.237 回答
0

我不这么认为。该 API 似乎专注于为主游戏循环开发代码,例如在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);
    }
}
于 2014-11-21T16:19:19.740 回答