2013-03-28 64 views
2

我需要創建帶有更多參數的enterFrame監聽器,而不僅僅是事件。我讀過這樣的: addEventListener() in Lua 第一種方法,使用使用參數創建事件監聽器Lua

local function listener(param1, param2) 
    return function(event) 
      print(event.name, event.phase, param1, param2) 
    end 
end  
Runtime:addEventListener("touch", listener(12, 33)) 

工作不錯,但現在我有刪除此enterFrame事件偵聽器的一個問題。

Runtime:removeEventListener("enterFrame",listener); 

不起作用,因爲函數名稱不是「偵聽器」。 我該如何刪除它?

回答

1

您可以緩存正在創建的函數,以便listener(x, y)將始終返回相同的函數。這樣的事情可能工作:

local listeners = {} 
local function listener(param1, param2) 
    -- add some separator, so 1,12 is different from 11,2 
    local key = param1.."\1"..param2 
    listeners[key] = listeners[key] or function(event) 
      print(event.name, event.phase, param1, param2) 
    end 
    return listeners[key] 
end 

由於listener(12, 33)總是會返回相同的結果,現在你可以做Runtime:removeEventListener("enterFrame",listener(12,33))