2011-08-22 100 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)