(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(4): handler
2014-10-10 18:27
453 查看
这里的函数主要用来做:回调函数。参考资料为quick_cocos.
星月倾心贡献~~~
简单聊两句~(小白:聊毛线,你以为谁都跟你一样有空聊...)
handler返回一个函数,将这个函数赋值给t,调用函数t,会调用Music方法test( str ),所以会有上面输出。
t函数调用的原理是什么呢?(小白:没人逼你说~~~)
大家都明白了吧(小白:没有~~~)
本章内容到这里就结束,希望对大家有用~
(小白:等等,我还没弄明白。。。)
作者使用 cocos2d-x 3.0 + lua学习和工作心得,未经作者允许,请勿转载!在此谢谢各位手下留情~~~
本文没有获得作者本人同意,不得转载,否则必追究相关责任。转载请注明出处!!~~
原文地址:/article/6607895.html
星月倾心贡献~~~
--[[ -- 将lua对象及方法包装为一个匿名函数 -- 许多功能需要传入一个 Lua 函数做参数,然后在特定事件发生时就会调用传入的函数。例如触摸事件、帧事件等等。 -- example: local MyScene = class( "MyScene", function() ) return cc.Layer:create() end ) function MyScene:ctor() self.frameTimeCount = 0 -- 注册帧事件 self:addEventListener( cc.ENTER_FRAME_EVENT, self.onEnterFrame ) end function MyScene:onEnterFrame( dt ) self.frameTimeCout = self.frameTimeCount + dt end 上述代码执行时将出错,报告"Invalid self" ,这就是因为 C++ 无法识别 Lua 对象方法。 因此在调用我们传入的 self.onEnterFrame 方法时没有提供正确的参数。 要让上述的代码正常工作,就需要使用 handler() 进行一下包装: function MyScene:ctor() self.frameTimeCount = 0 -- 注册帧事件 self:addEventListener( cc.ENTER_FRAME_EVENT , handler( self, self.onEnterFrame ) ) end 实际上,除了 C++ 回调 Lua 函数之外,在其他所有需要回调的地方都可以使用 handler()。 -- @param obj lua对象 -- @param function method 对象方法 -- @return function --]] function handler( obj, method ) return function(...) return method( obj, ... ) end end
简单聊两句~(小白:聊毛线,你以为谁都跟你一样有空聊...)
function handler( obj, method ) return function(...) return method( obj, ... ) end end local Music = {} function Music:test( str ) print( "Music: " .. str ) end local t = handler( Music, Music.test ) t( "小白:星月是帅哥;星月:小白就是坦诚~~~" ) 输出: Music: 小白:星月是帅哥;星月:小白就是坦诚~~~
handler返回一个函数,将这个函数赋值给t,调用函数t,会调用Music方法test( str ),所以会有上面输出。
t函数调用的原理是什么呢?(小白:没人逼你说~~~)
t( "小白:星月是帅哥;星月:小白就是坦诚~~~" ) 展开后就是: method( obj, "小白:星月是帅哥;星月:小白就是坦诚~~~" ) method就是:Music.test。obj就是:Music。 所以,替换后就是: Music.test( Music, "小白:星月是帅哥;星月:小白就是坦诚~~~" ) Music找到函数test,因为用的是 “.” 点号调用函数,所以第一个参数就是self,第二个参数才是test方法里面的str。
大家都明白了吧(小白:没有~~~)
本章内容到这里就结束,希望对大家有用~
(小白:等等,我还没弄明白。。。)
作者使用 cocos2d-x 3.0 + lua学习和工作心得,未经作者允许,请勿转载!在此谢谢各位手下留情~~~
本文没有获得作者本人同意,不得转载,否则必追究相关责任。转载请注明出处!!~~
原文地址:/article/6607895.html
相关文章推荐
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(3): 深度克隆clone()
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(1): printf 和math扩展
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 返回指定表格中的所有键(key):table.keys
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(2): 检查
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(7): 其他table方法
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 计算table元素个数:table.nums
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(6): 合并表格:table.merge
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(8): 生成只读table
- (原创) cocos2d-x 3.0+ lua 学习和工作(3) : 子类遍历所有父类特定方法
- (原创)cocos2d-x 3.0+ lua 学习和工作(1) : 自定义创建对象方法
- (原创) cocos2d-x 3.0+ lua 学习和工作(5) : table的remove的坑
- (原创)cocos2d-x 3.0+ lua 学习和工作(2) : 单一继承简单介绍
- cocos2d-x Lua 中的公共函数 handler
- 【原创心得】学习Lua(1)-- 准备工作
- cocos2d-x 3.0 在C++中调用lua函数(2)
- cocos2d-x 3.0 在C++中调用lua函数
- [原创]cocos2d-lua学习笔记(0)-提纲
- Lua学习之--函数,变长参数,closure(闭包)及select的一些特性
- 工作积累的一些LUA函数
- lua学习(三)--------lua调用c++函数和简单的错误处理