2013-03-28 82 views
0

我试图在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

你从哪里得到这个'os.pullEvent'函数? –

+0

它的电脑。一个minecraft mod – SReject

+0

尝试使用'coroutines'或者如果minecraft提供了类似的基于计时器的事件处理程序。 – hjpotter92

回答

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的则params的一个,我可能会被误认为是。

此外,如果您想每秒钟做某些事情,请启动一个也触发pullEvent的计时器。

相关问题