所以我遇到了一个已经用其他语言解决但在Corona / Lua中没有解决过的问题。如何使用匿名函数删除事件侦听器?
似乎应该“存储对函数的引用”,但我不确定Lua中的语法。我花了一些时间来查找它,我能找到的最接近的匹配是this answer,这对我来说并不是很有帮助,使用Javascript和所有。
答案 0 :(得分:3)
Lua没有“删除事件监听器”之类的东西。这由使用事件侦听器的库/框架处理,在您的案例中为Corona。我对Corona没有经验,但你看过removeEventListener() documentation吗?
看起来你只需要保存对你的监听器的引用,以便以后删除它。也就是说,而不是这样做:
Runtime:addEventListener( "enterFrame", function() ... end )
-- cannot remove the listener, because you have no reference to it
这样做:
-- store a reference to your listener, so that you can remove it
-- equivalent to: local handler; handler = function() ... end
local function handler() Runtime:removeEventListener("enterFrame", handler) end
Runtime:addEventListener( "enterFrame", handler )
答案 1 :(得分:0)
存储对函数的引用与存储对变量的引用完全相同。为了稍后操作一个对象,你需要给它一个名字,对吧?嗯,功能也一样。
顺便说一句,这只是将函数用作侦听器时的问题。然而,还有另一种做事件监听器的方式,你使用一个表作为监听器,然后在事件中命名的表中有一个函数: http://developer.anscamobile.com/content/application-programming-guide-event-handling#Listeners_and_Event_Delivery
我通常更喜欢使用表监听器。
答案 2 :(得分:0)
本地函数xyz()blabla 端
- 或
本地xyz = function()blabla 端
- 添加监听器
运行时:addEventListener('enterFrame',xyz)
- 再次将其删除
运行时:removeEventListener('enterFrame',xyz)