我还没有找到任何方法将挂钩分配给任何东西,如果可以的话,它会非常有用。另外,如何检查游戏对象是否仍然存在?(即没有死于年龄,也没有被敌人摧毁。)
问问题
954 次
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
这是我的用例:
- 计算当前房间的敌人数量(N)
- 计算活着的守卫人数(C)
- 如果 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 回答