• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

(原创)cocos2d-x3.0+lua学习和工作(4):公共函数(4):handler

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这里的函数主要用来做:回调函数。参考资料为quick_cocos.

 

星月倾心贡献~~~

 

--[[
-- 将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学习和工作心得,未经作者允许,请勿转载!在此谢谢各位手下留情~~~

本文没有获得作者本人同意,不得转载,否则必追究相关责任。转载请注明出处!!~~

原文地址:http://www.cnblogs.com/wodehao0808/p/4017210.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Cocos2d-Lua做一个活动转盘发布时间:2022-07-22
下一篇:
红包雨中:Redis和Lua的邂逅发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap