在不停止执行的情况下读取用户输入

我正在尝试在 Lua 应用程序的控制台界面中读取用户输入。但是,我不想像标题所示那样停止程序执行。使用 read() 将干扰正在进行的事件和接口更新的正常处理,而用户正在输入。

我能想到的最好的解决方案是维护一个临时变量,将任何不是函数键的用户输入应用于该变量。然而,我的事件处理程序返回扫描码,我不知道如何将其映射到 ASCII 码,除非维护一个每个键的表,这是我真的想避免的。

有什么想法吗?

编辑 为了举例说明我的意思:

function read_input()
 local input = read()
 do_something_with(input)
end
while true do
 e,param1,param2,param3 = os.pullEvent()
 if (e=='key' and param1=='201') then
  read_input()
 elseif (e=='something_else') then
  do_something_else()
 end
end

正如你所看到的,用户可能在需要用户输入的函数中落下。在进行此输入时,我不能让程序的任何其他(基于事件)函数受到干扰。

点赞
用户2232127
用户2232127

你需要连续从 os.pullEvent() 中读取键值。

local input
while true do
  e,param1,param2,param3 = os.pullEvent()
  if (e=='key') then
    -- 一些检查按下了哪个键并将其附加到input上的花哨工作
    -- 此外,如果按下Enter键,则执行其他花哨操作
  else
    -- 嘟嘟声blah
  end
end

我不确定,但我认为按下的键的字符在 pullEvent 的某些参数中,不过我可能错了。

此外,如果你想每秒执行一些操作,可以启动一个计时器,该计时器也会触发 pullEvent

2014-04-01 15:53:48