2011-08-22 182 views
0

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

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

+0

您是否打算让侦听器自行移除?如果不是,你怎么知道你什么时候有合适的听众? – lins314159

回答

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) 
+0

感谢您的回答。我给了你一个加英文的机会。 :) –

0

存储对函数的引用与存储对变量的引用完全相同。为了稍后操纵对象,你需要给它一个名字,对吧?那么,功能也是一样。

顺便提一下,这只是使用函数作为侦听器时的一个问题。然而有这样的事件监听器,在您使用一个表作为听者的另一种风格,然后在活动结束后命名的表函数: http://developer.anscamobile.com/content/application-programming-guide-event-handling#Listeners_and_Event_Delivery

我一般喜欢用表的听众。

0

对不起,上面的回答是废话!像这样做:

本地函数的xyz()布拉布拉 端

--or

局部xyz =函数()布拉布拉 端

--add听者

运行时:addEventListener('enterFrame',xyz)

- 再次删除它

运行时:removeEventListener('enterFrame',xyz)