2

我一直在编写程序,这样我就有一个主循环:

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

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

为什么这样做?我猜游戏可能会在执行某些操作之前等待您的脚本结束?

当整个 main 每次滴答都重复时,我怎样才能实现我想要的(做一些方法,设置变量,只有一次)?

4

2 回答 2

4

当整个 main 每次滴答都重复时,我怎样才能实现我想要的(做一些方法,设置变量,只有一次)?

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

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

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

在本文中查看有关游戏循环如何工作的更多详细信息:了解游戏循环、时间和滴答声

于 2015-05-07T12:38:14.400 回答
0

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

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

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

那部分有什么问题吗?

于 2015-05-07T11:08:10.237 回答