Lua 如果为true,我如何使事件只触发一次,而不是每次更新迭代都触发一次?
我的事件侦听器代码如下所示:Lua 如果为true,我如何使事件只触发一次,而不是每次更新迭代都触发一次?,lua,Lua,我的事件侦听器代码如下所示: local events = {} function registerEvent (event) table.insert(events, event) end function unregisterEvent (event) table.remove(events, event) end function processEvents () for _, event in pairs(events) do for _,
local events = {}
function registerEvent (event)
table.insert(events, event)
end
function unregisterEvent (event)
table.remove(events, event)
end
function processEvents ()
for _, event in pairs(events) do
for _, condition in pairs(event.conditions) do
if condition() then
event.triggered = true;
else
event.triggered = false;
break
end
end
if event.triggered then
event.callback()
end
end
end
registerEvent
{
conditions = {
function () return Keyboard.Shift == true end
},
callback = function () text = "triggered" end
}
registerEvent
{
conditions = {
function () return Keyboard.Shift == false end
},
callback = function () text = "not triggered" end
}
更新循环代码很简单:
function OnUpdate(deltaTime)
processEvents()
end
基本上,我希望回调在条件为真时只触发一次,而不是每次额外的更新(然后在条件不为真时重置触发检查)。根据评论中的讨论,通过对
processEvents
进行以下修改,您可以按照自己的方式完成此操作:
function processEvents ()
for _, event in pairs(events) do
for _, condition in pairs(event.conditions) do
if condition() then
event.triggered = true;
else
event.triggered = false;
event.triggeredbefore = false
break
end
end
if event.triggered and not event.triggeredbefore then
event.callback()
event.triggeredbefore = true
end
end
end
这听起来像是你的键盘状态没有在帧结束时重置。是否有代码管理您的键盘?它实际上正在更新,但主要问题是我只希望它在满足条件的第一帧触发,而不是在满足条件的每一帧触发。您是否可以添加一个变量,跟踪某个变量是否被触发,然后在设置为true后不再调用它?e、 g.
如果event.triggeredbefore而不是event.triggeredbefore,那么event.callback()event.triggeredbefore=true end
我刚才做了。如果event.triggered然后event.callback()end替换为我刚才给你的代码,那么再次将triggeredbefore设置为false。e、 g.如果条件()则event.triggered=true;else event.triggered=false;event.triggeredbefore=假中断结束