为什么我不能有一个主循环
Why can't I have a main loop
我编写的程序总是有一个主循环:
initialiseStuff();
while(1){
doRepetitiveStuff();
}
但如果我尝试这样做,screeps 似乎会给我一个 "console not responding" 错误。
为什么要这样做?我猜游戏可能会在执行某些操作之前等待您的脚本结束?
当每个 tick 都重复整个 main 时,如何实现我想要的(做一些方法,设置变量,仅一次)?
您的脚本永远不会终止(在本例中是一个永远不会终止的 while 循环)。请注意,该脚本 运行 在一个单独的定时进程中。
一段时间后,至少如果脚本没有完成,模拟器可以将 ai 标记为未正常工作,并可以选择如何处理它。例如通知用户脚本没有响应,或者在比赛中简单地关闭 ai。
您能做的最好的事情就是避免硬计算,或者将它们分散在不同的刻度上,同时将结果保存在内存中。请注意,模拟器在执行您的机器人时不会更改任何游戏状态(只有当所有机器人都执行了它们的代码时才会这样做)。
这部分有什么问题吗?
How can I achieve what I want (do some methods, set variables, only once) when the entire main is repeated every tick?
基本上,你不能只执行一次。游戏引擎 运行 本身就是无限循环,你无法摆脱它。
请务必了解,Screeps 是一款多人在线游戏。您和其他玩家的脚本正在服务器端执行。这意味着您可以简单地使用示例中的无限循环来破坏游戏引擎进程。
此外,由于分布式和可扩展的服务器架构,您的脚本可以 运行 在不同的机器上随着不同的游戏时间刻度。因此,进行初始脚本设置没有任何意义,因为它不会在多台独立机器的运行时间环境之间共享。
在本文中查看有关游戏循环工作原理的更多详细信息:Understanding game loop, time and ticks。
我编写的程序总是有一个主循环:
initialiseStuff();
while(1){
doRepetitiveStuff();
}
但如果我尝试这样做,screeps 似乎会给我一个 "console not responding" 错误。
为什么要这样做?我猜游戏可能会在执行某些操作之前等待您的脚本结束?
当每个 tick 都重复整个 main 时,如何实现我想要的(做一些方法,设置变量,仅一次)?
您的脚本永远不会终止(在本例中是一个永远不会终止的 while 循环)。请注意,该脚本 运行 在一个单独的定时进程中。
一段时间后,至少如果脚本没有完成,模拟器可以将 ai 标记为未正常工作,并可以选择如何处理它。例如通知用户脚本没有响应,或者在比赛中简单地关闭 ai。
您能做的最好的事情就是避免硬计算,或者将它们分散在不同的刻度上,同时将结果保存在内存中。请注意,模拟器在执行您的机器人时不会更改任何游戏状态(只有当所有机器人都执行了它们的代码时才会这样做)。
这部分有什么问题吗?
How can I achieve what I want (do some methods, set variables, only once) when the entire main is repeated every tick?
基本上,你不能只执行一次。游戏引擎 运行 本身就是无限循环,你无法摆脱它。
请务必了解,Screeps 是一款多人在线游戏。您和其他玩家的脚本正在服务器端执行。这意味着您可以简单地使用示例中的无限循环来破坏游戏引擎进程。
此外,由于分布式和可扩展的服务器架构,您的脚本可以 运行 在不同的机器上随着不同的游戏时间刻度。因此,进行初始脚本设置没有任何意义,因为它不会在多台独立机器的运行时间环境之间共享。
在本文中查看有关游戏循环工作原理的更多详细信息:Understanding game loop, time and ticks。