我一直写程序,我有一个主循环:为什么我不能有一个主循环
initialiseStuff();
while(1){
doRepetitiveStuff();
}
但似乎screeps会给我一个“控制台没有响应”的错误,如果我尝试这一点。
它为什么这样做?我猜测游戏在做某件事之前会等待脚本的结束?
当整个主体重复每次打勾时,我怎样才能实现我想要的(做一些方法,设置变量,只做一次)?
我一直写程序,我有一个主循环:为什么我不能有一个主循环
initialiseStuff();
while(1){
doRepetitiveStuff();
}
但似乎screeps会给我一个“控制台没有响应”的错误,如果我尝试这一点。
它为什么这样做?我猜测游戏在做某件事之前会等待脚本的结束?
当整个主体重复每次打勾时,我怎样才能实现我想要的(做一些方法,设置变量,只做一次)?
当整个主体重复每次打勾时,我怎么能达到我想要的效果(做一些方法,只设置一次变量)?
基本上,你不能只执行一次。游戏引擎自己运行这个无限循环,你无法摆脱它。
重要的是要明白,Screeps是一款多人在线游戏。您和其他玩家的脚本正在服务器端执行。这意味着你可以简单地打破游戏引擎的过程,就像在你的例子中那样的无限循环。
此外,由于分布式和可扩展的服务器架构,您的脚本可以在不同的游戏机上沿不同的机器运行。因此,进行初始脚本设置没有任何意义,因为它不会在多个分离机器的运行时环境之间共享。
查看关于游戏循环如何在本文中工作的更多细节:Understanding game loop, time and ticks。
你的脚本永远不会终止(在这种情况下是一个永不终止的while循环)。请注意,该脚本正在运行时间单独的进程中运行。
经过一段时间后,至少脚本没有完成,模拟器可以标记ai工作不正常,并可以选择如何处理它。例如,通知用户脚本没有响应,或者在竞争中简单地关闭ai。
您可以做的最好的事情是避免硬计算,或者将它们分散在单独的滴答中,同时将结果保留在内存中。请注意,模拟器在执行你的机器人时不会改变任何游戏状态(只有当所有机器人都执行了它们的代码时)。
这部分有什么麻烦吗?
尝试延迟加载你需要的任何“设置”;或者像上面提到的那样,根本不关心它,并且有不同的设计。至少,你会学到一种新的范式。 – vivri