2013-03-28 88 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的計時器。

相關問題