使用参数创建 Lua 事件监听器。

我需要创建一个 enterFrame 监听器,比只使用事件更多参数。我已经阅读了这个文档: Lua 中的 addEventListener()

第一种方式,使用:

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);

不起作用,因为函数名不是“listener”。

如何删除它?

点赞
用户1442917
用户1442917

你可以缓存你创建的函数,这样 listener(x, y) 就能总是返回相同的函数。例如下面的代码:

local listeners = {}
local function listener(param1, param2)
     -- 添加一些分隔符,这样 1,12 就不同于 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))

2013-03-28 17:53:30