【问题标题】:Computercraft Evaluate and Execute relative to ticksComputercraft 相对于刻度的评估和执行
【发布时间】: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.forward et.al。产生带有一些值的协程,以向 ComputerCraft 发出它想要采取的动作的信号。完成后,ComputerCraft 会恢复您的代码。
  • 所以 ComputerCraft 在 Minecraft 时间表上运行 turtle 和类似的命令,但其他所有内容都与游戏异步运行?
  • 没有。当您的代码正在执行时,游戏中不会发生任何其他事情,并且 MC 完全专注于运行您的代码。如果您花费的时间过长,ComputerCraft 将终止您的程序,因此您不会冻结 Minecraft。
  • 所以代码在tick之间执行,直到需要一个tick才能完成操作。

标签: lua computercraft


【解决方案1】:

通常,唯一会触发某种滴答声或导致滴答声经过大量停止的事情是拉动事件(os.pullEvent,os.pullEventRaw,coroutine.yield)乌龟运动当然会需要打勾,然后调用 coroutine.yield 来暂停脚本并移动。

计算机技术的技术方面的问题是,那些接近 mod 本身并对其了解很多的人会更好地回答它们。经常使用 SO 的人并不多有这种知识。如果你想知道一切,我会在 CC 论坛上询问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-20
    • 2019-05-30
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    相关资源
    最近更新 更多