Javascript 是否可以将函数挂钩分配给游戏对象,例如在init、death等上运行函数?
我还没有找到任何方法为任何东西分配挂钩,如果可以的话,这将非常有用。另外,如何检查游戏对象是否仍然存在?(也就是说,没有因年老而死亡,也没有被敌人摧毁。)如果你的意思是通过API-还不可能。但你们可以改变你们的当前状态,并将其和记忆中的对象的前一个状态进行比较。例如,如果Javascript 是否可以将函数挂钩分配给游戏对象,例如在init、death等上运行函数?,javascript,screeps,Javascript,Screeps,我还没有找到任何方法为任何东西分配挂钩,如果可以的话,这将非常有用。另外,如何检查游戏对象是否仍然存在?(也就是说,没有因年老而死亡,也没有被敌人摧毁。)如果你的意思是通过API-还不可能。但你们可以改变你们的当前状态,并将其和记忆中的对象的前一个状态进行比较。例如,如果内存中的某个爬行名称仍然存在,但它在游戏中消失了。爬行,则发生了一些事情 for(var i in Game.creeps) { var creep = Game.creeps[i]; creep.memory.
内存
中的某个爬行名称仍然存在,但它在游戏中消失了。爬行
,则发生了一些事情
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.hitsscrew.hits很好,但它的阈值更高。结果是我第一次尝试时耗尽了能量,所以游戏没有产生更多的爬行。谢谢!目前有没有任何方法可以检查死亡,而不必在最坏情况下遍历游戏中的所有爬行?还没有,但我们正在考虑某种事件存储。我们可能会我希望以后再添加。不过,在爬行过程中进行迭代并不是真正的CPU消耗操作。