如何删除匿名事件监听器?

时间:2011-08-22 05:52:59

标签: lua corona

所以我遇到了一个已经用其他语言解决但在Corona / Lua中没有解决过的问题。如何使用匿名函数删除事件侦听器?

似乎应该“存储对函数的引用”,但我不确定Lua中的语法。我花了一些时间来查找它,我能找到的最接近的匹配是this answer,这对我来说并不是很有帮助,使用Javascript和所有。

3 个答案:

答案 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)