最近在研究怎么把积分墙嵌入到Cocos2d-x Lua
的里,折腾了几天,总算调通了,主要要解决的问题是,调用积分墙之后,当积分发生改变的时候,有一个回调方法,回调会返回用户还剩下多少积分,当AndroID
收到这个回调的时候,需要把这个通知给lua
做对应的处理,我就是在这里卡住了。
先理一下思路要实现上面提到的回调通知lua
,首先要实现AndroID
回调给C++
,再从C++
去调用Lua
的方法。
一步一步来,先看AndroID
端的回调方法,当有积分变化的时候,onPointBalanceChange
方法会被触发:
onPointBalanceChange
方法里用到了一个pointsBalanceChange()
的方法,这个方法在下面被定义成了本地函数,通过本地函数,来调用C++的代码
再看在C++
的里的代码:
先判断是AndroID的情况下再进行下一步处理
然后写一个方法,这个方法的方法名图上已经有详细说明了
voID Java_org_cocos2dx_lua_AppActivity_pointsBalanceChange( jnienv *env,jobject thiz,jint point ){}
到现在为止,不出意外的话,编译应该会通过,并且可以用真机运行调试,当AndroID
里的积分变化回调方法被触发的时候,对应到C++
里的方法也会被触发,并且输出cclog
里的内容
如果这一步你调试通了,那就表示从AndroID到C++的调用调通了,接下来再看C++怎么调用lua,需要在刚才的基础上添加一些配置:
1、先添加了:
//把LuaEngine include进来之后,下面会用到这个#include "ccluaEngine.h"
2、在Java_org_cocos2dx_lua_AppActivity_pointsBalanceChange
方法里添加一大堆东西,我挨个解释一下(有的我也不太明白,有错误请指正)
//这两个我是没太明白,大概意思是得到一个可以和lua连接的对象auto engine = LuaEngine::getInstance()->getLuaStack();lua_State *state = engine->getLuaState();
//通过这个方法去查找lua函数,并压入栈底,pointsBalanceChange是在lua定义的一个functionlua_getglobal(state,"pointsBalanceChange");
//pointsBalanceChange需要接受一个参数,这里把AndroID得到的积分数据,传入给这个functionengine->pushInt(point);
//调用pointsBalanceChange函数,第二个参数表示有多少参数,第三个表示有多少个返回值,第四个参数设置成0表示如果出错了,直接输出原始的错误信息,具体的没太明白,后续在研究lua_pcall(state,1,0);
//调用完成后清栈,第二个参数为从堆栈中d出的返回值,因为没有返回值所以设置为0lua_pop(state,0);
到这里,C++
的代码都写完了,接下来需要在lua
下的main.lua
里实现一个pointsBalanceChange
方法,接受一个参数,在这个方法里输出一下得到的point:
都完成了,这个时候编译一下:
cocos compile -p androID
不出意外是没问题的,然后真机测试,当AndroID的回调函数被触发的时候对应的Lua里的cclog日志也被输出出来了:
总结
以上是内存溢出为你收集整理的Cocos2d-x Lua实现从Android回调到Lua的方法全部内容,希望文章能够帮你解决Cocos2d-x Lua实现从Android回调到Lua的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)