【问题标题】:Computercraft lua change value laterComputercraft lua 稍后更改值
【发布时间】:2015-02-10 22:57:03
【问题描述】:

好的,我对 lua 和计算机技术几乎完全陌生,但我有很多创造力。我正在尝试编写每秒重新打印一个变量的代码。这是我目前所拥有的:

display = "Loading..."
While true do
 sleep(1)
 term.clear()
 term.setCursorPos(1,1)
 print (display)
end
sleep(3)
display = "hello"

我想用它来渲染一个 2d 游戏,“显示”变量会经常变化,因此我希望它每秒更新一次。

当我运行代码时,它确实每秒刷新一次,但由于某种原因,我似乎无法在 3 秒后更改“显示”变量来测试它。

我做错了什么?

【问题讨论】:

标签: lua computercraft


【解决方案1】:

while true 是一个无限循环。脚本永远不会到达sleep(3)

也许您想将while true 替换为for i=1,3

【讨论】:

  • 问题在于我希望循环一直运行,最终我想用它来渲染 2d 游戏,“显示”变量会经常变化,因此我想要它每秒更新一次。
【解决方案2】:

我在 Lua 方面没有经验,但这可能是一个解决方案:answer on SO

在 UI 线程中,运行:

while ((status=lua_resume(L_coroutine, 0)) == LUA_YIELD) {
  semaphore_wait(); /* whatever the appropriate C# call is */
}

“等待响应”应该类似于:

while not results[my_result] do
  coroutine.yield()
end

“传入消息”函数在 Lua 中应如下所示:

results[cur_result]=parsed_message

【讨论】:

  • 我觉得应该是评论
  • @BartekBanachewicz 评论没有提供空间来解释这个深度的答案。但是,是的,这不是标准答案,但可能正是 OP 解决问题所需要的。
  • 感谢您的回答。但就目前而言,您链接到的帖子有点超出我的想象。我仍然会将其标记为正确,因为它可以帮助其他比我更有经验的观众。
  • @ryzehalberd 最重要的是将while true 更改为while variable 该变量应在循环中的某个点返回false,以便while 可以停止并且代码将移动到在end 之后的sleep(3)
猜你喜欢
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
相关资源
最近更新 更多