【发布时间】:2015-06-16 21:43:06
【问题描述】:
为了编写快速的海龟程序,我想知道关于滴答声,代码是如何执行的?除了海龟移动所需的时间之外,执行函数或评估其他 Lua 语句是否存在滴答惩罚?换句话说,是否需要相同的时间来执行此操作(假设 if 语句评估为 false):
turtle.forward()
if turtle.getFuelLevel() == 0 then turtle.refuel() end
turtle.forward()
这个:
turtle.forward()
if x < 20 then turtle.refuel() end
turtle.forward()
x = x+1
和
turtle.forward()
turtle.forward()
?谢谢
编辑:
根据 Eric 的说法,任何与 Minecraft 接口的东西都可能会受到影响,但原始 Lua 的操作不会。换句话说,第一个例子需要额外的 2 个刻度(除了多刻度移动),第二个需要 1 个额外的刻度,最后一个没有额外的刻度。
【问题讨论】:
-
任何与 minecraft 接口的东西都可以打勾。像 x = x + 1 这样的事情不会发生。您需要阅读计算机技术的源代码才能了解更多信息
-
turtle.forward等会阻塞,直到操作完成。从技术上讲,ComputerCraft 在 Lua 协程中运行您的代码,turtle.forwardet.al。产生带有一些值的协程,以向 ComputerCraft 发出它想要采取的动作的信号。完成后,ComputerCraft 会恢复您的代码。 -
所以 ComputerCraft 在 Minecraft 时间表上运行
turtle和类似的命令,但其他所有内容都与游戏异步运行? -
没有。当您的代码正在执行时,游戏中不会发生任何其他事情,并且 MC 完全专注于运行您的代码。如果您花费的时间过长,ComputerCraft 将终止您的程序,因此您不会冻结 Minecraft。
-
所以代码在tick之间执行,直到需要一个tick才能完成操作。
标签: lua computercraft