我正在尝试创建while true do
循环,使用os.pullEvent
对点击作出反应,并更新监视器。
问题在于,当我按下其中一个屏幕按钮时,它只会更新屏幕,我发现这是因为pullEvent
会停止脚本,直到事件被触发为止。
是否可以这样做pullEvent
不会阻止我更新显示器?
function getClick()
event,side,x,y = os.pullEvent("monitor_touch")
button.checkxy(x,y)
end
local tmp = 0;
while true do
button.label(2, 2, "Test "..tmp)
button.screen()
tmp++
getClick()
end
答案 0 :(得分:4)
您可以轻松地使用并行api同时运行这两个代码。它是如何工作的,它按顺序运行它们,直到它碰到使用os.pullEvent
的东西,然后交换并执行另一侧,如果两者都停在os.pullEvent
的某个位置,那么它会一直交换到一个收益率并从那里继续。
local function getClick()
local event,side,x,y = os.pullEvent("monitor_touch")
buttoncheckxy(x,y)
end
local tmp = 0
local function makeButtons()
while true do
button.label(2,2,"Test "..tmp)
button.screen()
tmp++
sleep(0)
end
end
parallel.waitForAny(getClick,makeButtons)
现在,如果你注意到,首先,我已经将你的while循环变成了一个函数并在其中添加了一个睡眠,这样它就会产生并允许程序交换。最后,您会看到parallel.waitForAny()
运行指定的两个函数,当其中一个函数完成时,在这种情况下,只要您单击按钮,它就会结束。但是请注意,在我没有调用函数的论证中,我只是传递它们。
答案 1 :(得分:0)
我现在没有计算机技术或查找功能,但我知道你可以使用os.startTimer(t)函数,这将导致t秒内的事件(我认为它是秒)
用法:
update_rate = 1
local _timer = os.startTimer(update_rate)
while true do
local event = os.pullEvent()
if event == _timer then
--updte_screen()
_timer = os.startTimer(update_rate)
elseif event == --some oter events you want to take action for
--action()
end
end
注意:代码未经过测试,我很长一段时间没有使用计算机技术,如果我犯了错误,请求纠正我。