所以我遇到了一個已經在其他語言但在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