为什么我没有主循环

时间:2015-05-07 00:43:21

标签: screeps

我总是编写程序,以便我有一个主循环:

initialiseStuff();
while(1){
    doRepetitiveStuff();
}

但似乎screeps会给我一个"控制台没有响应"如果我尝试这个错误。

为什么这样做?在做某事之前,我猜测游戏会等待你的剧本结束吗?

当每个嘀嗒声重复整个主体时,我怎样才能达到我想要的效果(做一些方法,只设置一次变量)?

2 个答案:

答案 0 :(得分:4)

  

当每个嘀嗒声重复整个主体时,我怎样才能达到我想要的效果(做一些方法,只设置一次变量)?

基本上,你不能只执行一次。游戏引擎自己运行无限循环,你无法摆脱它。

重要的是要了解,Screeps是一款多人在线游戏。你和其他球员'脚本正在服务器端执行。这意味着您可以简单地使用如示例中的无限循环来破坏游戏引擎进程。

此外,由于分布式和可扩展的服务器架构,您的脚本可以在不同的机器上沿着不同的游戏标记运行。因此,制作初始脚本设置没有任何意义,因为它不会在多个分离的机器之间共享'运行时环境。

在本文中详细了解游戏循环的工作原理:Understanding game loop, time and ticks

答案 1 :(得分:0)

您的脚本永远不会终止(在这种情况下,永远不会终止的while循环)。请注意,脚本在一个单独的进程中运行,该进程是定时的。

经过一段时间后,至少如果脚本没有完成,模拟器可以将ai标记为不能正常工作,并可以选择如何处理它。例如,通知用户脚本没有响应,或者在竞争中只是关闭ai。

您可以做的最好的事情是避免硬计算,或将它们分散在不同的刻度上,同时将结果保存在内存中。请注意,模拟器在执行机器人时不会更改任何游戏状态(只有当所有机器人都执行了代码时才会这样做。)

那部分有什么麻烦吗?