所以我遇到了一个已经在其他语言但在Corona/Lua中没有解决的问题。如何用匿名函数移除事件侦听器?如何删除匿名事件侦听器?
似乎应该'存储对函数的引用',但我不确定在Lua中的语法。我花了一些时间查找它,并且我能找到的最接近的匹配是this answer,这对我来说并不是很有帮助,在Javascript和所有内容中都是如此。
所以我遇到了一个已经在其他语言但在Corona/Lua中没有解决的问题。如何用匿名函数移除事件侦听器?如何删除匿名事件侦听器?
似乎应该'存储对函数的引用',但我不确定在Lua中的语法。我花了一些时间查找它,并且我能找到的最接近的匹配是this answer,这对我来说并不是很有帮助,在Javascript和所有内容中都是如此。
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)
感谢您的回答。我给了你一个加英文的机会。 :) –
存储对函数的引用与存储对变量的引用完全相同。为了稍后操纵对象,你需要给它一个名字,对吧?那么,功能也是一样。
顺便提一下,这只是使用函数作为侦听器时的一个问题。然而有这样的事件监听器,在您使用一个表作为听者的另一种风格,然后在活动结束后命名的表函数: http://developer.anscamobile.com/content/application-programming-guide-event-handling#Listeners_and_Event_Delivery
我一般喜欢用表的听众。
对不起,上面的回答是废话!像这样做:
本地函数的xyz()布拉布拉 端
--or
局部xyz =函数()布拉布拉 端
--add听者
运行时:addEventListener('enterFrame',xyz)
- 再次删除它
运行时:removeEventListener('enterFrame',xyz)
您是否打算让侦听器自行移除?如果不是,你怎么知道你什么时候有合适的听众? – lins314159