http://blog.sina.com.cn/s/blog_93add5520101lv02.HTML
本来只是单纯想实现异步加载图片的功能,恰恰发现lua竟然没有这个异步机制,于是无奈求助于C++的addImageAsync方法,但是接下来是,加载完了如果告诉lua任务完成呢,果断回调啊,但这就牵扯到了C++与lua之间的通信问题了,众所周知,lua与C++通信通过栈来处理,其实这块cocos2dx 3.0已经帮我们做好了封装,就在ccluaEngine里面,不知道路劲?就在frameworks\cocos2d-x\cocos\scripting\lua-bindings\manual下面是官方手动封装好的,我们打开这个cpp着重看下handleCallFuncActionEven
这个看字面意思大概就是处理回调的方法。 他首先把参数给强制转换成了BasicScriptData的结构体,结构体里面的naviveObject一定要存在,这个nativeObject是啥意思呢,下一行就是关键了,我们进getobjectHandler查看 cpp回调lua函数新方法" title="关于cocos2dx3.0
我们发现他从一个_mapObjectHandlers里面去找这个object,也就是BasicScriptData结构体里面的nativeObject,那么我们猜测有getobjectHandler肯定也有addobjectHandler,经过查询在LuaScriptHandlerMgr里面还真有这个方法: cpp回调lua函数新方法" title="关于cocos2dx3.0
我们大致了解了,这里面是存了一个key-value的键值对,key是个对象,值是包含了handler和handlerType的数据,handlerType我们可以根据他前面的信息查到他的内容,其实就是枚举的一个值,handler是什么意思呢?他其实呢,就是lua方法在C++里面的一个ID。如果不懂,那么就看下tolua_Cocos2d_ScriptHandlerMgr_registerScriptHandler00这个方法吧,如果你看到下面这段代码,稍微有点lua基础的童鞋应该就明白了,如果不明白,那就只有回去翻翻有关lua和C++之间栈通信的资料吧,这里就不细说了 cpp回调lua函数新方法" title="关于cocos2dx3.0
我们回到最先的handleCallFuncActionEven
我们还要在ScriptHandlerMgr的HandlerType定义一个自己的回调类型, cpp回调lua函数新方法" title="关于cocos2dx3.0
看来官方可能知道我们自己也要修改,所以加了Event_CUSTOM给我们做预留呢 cpp回调lua函数新方法" title="关于cocos2dx3.0
cpp回调lua函数新方法" title="关于cocos2dx3.0
怎么样,很简单吧,我就把传递进来的BasiceScriptData的value换成了一个int的vector,依葫芦画瓢画瓢,完成了一个自定义的回调方法,那我们再来看下,怎么调用的 cpp回调lua函数新方法" title="关于cocos2dx3.0
很简单吧,就是吧数据从Ref改成了vector,lua那边还是跟原来一样,最后一个事件类型别忘记写成我们自己的 cc.Handler.EVENT_EVENT_CUSTOMINT 你可以对应在frameworks\cocos2d-x\cocos\scripting\lua-bindings\script下面的Cocos2dConstant.lua里面找到对应cc.Handler的一批值,在后面补上EVENT_EVENT_CUSTOMINT = 10001,: ScriptHandlerMgr:getInstance():registerScriptHandler(cc.LoadManager:GetInstance(),LoadCallBack,cc.Handler.EVENT_EVENT_CUSTOMINT ) OK至此大功告成,以后想回调传什么值,我们可以自己在添加,随便加,哈哈哈,最后说一句,继承luaEngine的类一定要跟luaEngine放在一起,不然就等着呵呵吧 总结
以上是内存溢出为你收集整理的关于cocos2dx3.0 cpp回调lua函数新方法全部内容,希望文章能够帮你解决关于cocos2dx3.0 cpp回调lua函数新方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)