读取用户输入而不停止执行

时间:2013-03-28 22:33:34

标签: events event-handling lua minecraft

我正在尝试在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

正如您所看到的,用户可以在某个时刻登陆要求用户输入的功能。在进行此输入时,我不能使该程序的任何其他(基于事件的)功能受到阻碍。

1 个答案:

答案 0 :(得分:0)

您需要从os.pullEvent()

连续读取密钥
local input
while true do
  e,param1,param2,param3 = os.pullEvent()
  if (e=='key') then
    -- do some fancy stuff for checking which key has pressed and append it to input
    -- additionally if it's enter do something other fancy
  else
    -- blah blah
  end
end

我不确定,但我认为按下哪个键的字符在pullEvent的一个参数中,我可能会误解为。

此外,如果你想每隔一秒左右做一些事情,启动一个同时激活pullEvent的计时器。