Cocos2d-x Lua实现从Android回调到Lua的方法
2015-01-05 02:18
295 查看
最近在研究怎么把积分墙嵌入到
先理一下思路要实现上面提到的回调通知
一步一步来,先看
再看在
先判断是Android的情况下再进行下一步处理
然后写一个方法,这个方法的方法名图上已经有详细说明了
到现在为止,不出意外的话,编译应该会通过,并且可以用真机运行调试,当
如果这一步你调试通了,那就表示从Android到C++的调用调通了,接下来再看C++怎么调用lua,需要在刚才的基础上添加一些配置:
1、先添加了:
2、在
到这里,
都完成了,这个时候编译一下:
不出意外是没问题的,然后真机测试,当Android的回调函数被触发的时候对应的Lua里的cclog日志也被输出出来了:
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定义的一个function lua_getglobal(state, "pointsBalanceChange");
//pointsBalanceChange需要接受一个参数,这里把Android得到的积分数据,传入给这个function engine->pushInt(point);
//调用pointsBalanceChange函数,第二个参数表示有多少参数,第三个表示有多少个返回值,第四个参数设置成0表示如果出错了,直接输出原始的错误信息,具体的没太明白,后续在研究 lua_pcall(state, 1, 0, 0);
//调用完成后清栈,第二个参数为从堆栈中弹出的返回值,因为没有返回值所以设置为0 lua_pop(state, 0);
到这里,
C++的代码都写完了,接下来需要在
lua下的
main.lua里实现一个
pointsBalanceChange方法,接受一个参数,在这个方法里输出一下得到的point:
都完成了,这个时候编译一下:
cocos compile -p android
不出意外是没问题的,然后真机测试,当Android的回调函数被触发的时候对应的Lua里的cclog日志也被输出出来了:
相关文章推荐
- 总结关于lua, c , android,在 cocos2d-x 之间的调用方法
- Android 接口函数回调(callback)的基础使用方法与理解【回调】的具体实现
- android 中的回调方法的实现
- 实现android异步调用WEB API的方法,并实现回调
- Cocos2d-x:静态方法实现android的Toast效果
- MAC下cocos2d-x项目转化Android项目的具体实现方法
- 关于Cocos2d-x-lua的Android原生按键无反应的解决方法
- Android中解决复写ListView时出现OnScollListener无法监听,这时如果实现标题栏渐变色的话,应该将计算滚动距离的方法,写在不断调用的回调中。
- 【个人向】Android回调接口的实现方法
- Cocos2d-x 3.0 lua编程 实现在Android下响应Home键和Back键
- GetCallbackEventReference方法实现局部刷新,回调非WebSerice实现
- android使用 2D 方法实现倒影特效
- 【原创】Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- android 实现拍照的2种方法
- 使用线程创建的三种方法实现j2me联网(PS:我想做android!NND!)
- android 固件升级/复位实现方法分析
- Android 按钮效果的两种实现方法
- MicrosoftAjax.Function.js 中用call 和apply方法实现回调和委托的代码
- Android上实现zlib解压缩的方法 Inflater用法
- android使用 2D 方法实现倒影特效