Lua 协程错误

我目前正在使用Lua制作一个简单的“猜数游戏”。我使用iPad上的TouchLua+应用程序进行编程。其中一个游戏模式是你有一定的时间来猜数字。我想为此创建一个协程,从给定的时间开始倒计时。但是由于某种原因,我不能在协程运行时输入数字。有人可以帮忙吗?以下是我目前的代码。

点赞
用户869951
用户869951

协程不是多进程的一种形式,而是一种协作式多线程的形式。在协程运行的期间,不会有其他东西在运行。协程通常在运行时需要经常将控制权还给调用者,而调用者则需要恢复协程,以便协程可以在它的“yield”处继续运行。你可以看到这个过程会让它看起来像是并行处理。

所以在你的情况下,你会想在循环的内部进行 yield,等待一小段时间后再进行:

co = coroutine.create(function()
    for i = 1, roundTime do
        sleep(1)
        sys.alert("tock")
        coroutine.yield()
    end
   lose = true
end)

很不幸,你无法中断 io.read(),这意味着上面的代码是无用的。理想情况下,你会想要一个“io.peek”函数,这样你就可以这样做:

while coroutine.status(co) ~= "dead" do
    coroutine.resume(co)
    if io.peek() then -- non-blocking, just checks if a key has been pressed
        ... get the answer and process ...
    end
end

我不知道在 Lua 中是否有非阻塞的键盘输入方式。你可以创建一个 C 扩展程序,将C 非阻塞键盘输入 的部分暴露给 Lua,假设 TouchLua+ 支持 C 扩展程序。我怀疑这一点,因为它是一个 iOS 应用程序。

它似乎没有时间循环或回调等机制,而且我也找不到任何文档。如果你可以创建一个文本框,用户可以在其中输入答案,然后他们必须点击“接受”按钮,那么你就可以测量它花费的时间。如果有一个时间循环,你可以在那里检查时间,并在时间到时显示消息。所有这些在 Corona 中都很容易实现,但 TouchLua+ 可能无法实现。

2014-03-19 05:47:06