2015-05-07 28 views
2

我一直写程序,我有一个主循环:为什么我不能有一个主循环

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

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

它为什么这样做?我猜测游戏在做某件事之前会等待脚本的结束?

当整个主体重复每次打勾时,我怎样才能实现我想要的(做一些方法,设置变量,只做一次)?

+0

尝试延迟加载你需要的任何“设置”;或者像上面提到的那样,根本不关心它,并且有不同的设计。至少,你会学到一种新的范式。 – vivri

回答

4

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

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

重要的是要明白,Screeps是一款多人在线游戏。您和其他玩家的脚本正在服务器端执行。这意味着你可以简单地打破游戏引擎的过程,就像在你的例子中那样的无限循环。

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

查看关于游戏循环如何在本文中工作的更多细节:Understanding game loop, time and ticks

0

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

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

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

这部分有什么麻烦吗?

+0

screeps api可以在这里找到http://support.screeps.com/hc/en-us/articles/203084991-API-Reference 这里是一个计数器的快速示例,每次执行时都会打出更高的1: 'if(Memory.ticks === undefined)Memory.ticks = 0; Memory.ticks ++;' – avdg

+0

另请参阅http://support.screeps.com/hc/en-us/sections/201052561-脚本 – avdg