handler 将 Lua 对象及其方法包装为一个匿名函数。 格式: 函数 = handler(对象, 对象.方法) 在 quick-cocos2d-x 中,许多功能需要传入一个 Lua 函数做参数,然后在特定事件发生时就会调用传入的函数。例如触摸事件、帧事件等等。 local MyScene = class("MyScene", function() return display.newScene("MyScene") end) function MyScene:ctor() self.frameTimeCount = 0 -- 注册帧事件 self:scheduleUpdate(self.onEnterFrame) end function MyScene:onEnterFrame(dt) self.frameTimeCount = self.frameTimeCount + dt end 上述代码执行时将出错,报告“Invalid self”,这就是因为 C++ 无法识别 Lua 对象方法。因此在调用我们传入的 self.onEnterFrame 方法时没有提供正确的参数。 要让上述的代码正常工作,就需要使用 handler() 进行一下包装: function MyScene:ctor() self.frameTimeCount = 0 -- 注册帧事件 self:scheduleUpdate(handler(self, self.onEnterFrame)) end 实际上,除了 C++ 回调 Lua 函数之外,在其他所有需要回调的地方都可以使用 handler()。