资讯专栏INFORMATION COLUMN

Cocos2d-x Lua实现从Android回调到Lua的方法

wmui / 857人阅读

摘要:先理一下思路要实现上面提到的回调通知,首先要实现回调给,再从去调用的方法。

最近在研究怎么把积分墙嵌入到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日志也被输出出来了:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12168.html

相关文章

  • 网狐荣耀6701/6801 手机打包发布

    摘要:环境环境主要用于资源打包发布安卓打包和模拟运行和调试。环境下,安卓打包修改文件,中的路径。目录下,提供了一键打包脚本发布版发布版会发布数到路径下。使用以下命令即可运行手机项目。 1.前言 本篇将介绍网狐cocos2dx-lua工程打包android的apk、ios编译过程以及vs2015模拟运行和调试、lua脚本热更新。关于网狐的服务端编译运行,请查看网狐6701/6801服务端编译 ...

    LancerComet 评论0 收藏0
  • 网狐荣耀6701/6801 手机打包发布

    摘要:环境环境主要用于资源打包发布安卓打包和模拟运行和调试。环境下,安卓打包修改文件,中的路径。目录下,提供了一键打包脚本发布版发布版会发布数到路径下。使用以下命令即可运行手机项目。 1.前言 本篇将介绍网狐cocos2dx-lua工程打包android的apk、ios编译过程以及vs2015模拟运行和调试、lua脚本热更新。关于网狐的服务端编译运行,请查看网狐6701/6801服务端编译 ...

    macg0406 评论0 收藏0
  • Luakit前世今生

    摘要:的历史渊源最近发布了一个跨平台的开发框架。在年下半年,由于机缘巧合,我参与开发了企业微信的一个分支版本,上叫政务微信。 Luakit的历史渊源 最近发布了一个跨平台的app开发框架Luakit 。那怎么会想到做这样一个东西呢?这要先说一下我参与过的一些项目,和在项目中接触到的一些技术点和对项目开发体检了,因为Luakit是集合了几个重要技术才能做到用Lua脚本来实现跨平台app开发的。...

    mayaohua 评论0 收藏0
  • Luakit前世今生

    摘要:的历史渊源最近发布了一个跨平台的开发框架。在年下半年,由于机缘巧合,我参与开发了企业微信的一个分支版本,上叫政务微信。 Luakit的历史渊源 最近发布了一个跨平台的app开发框架Luakit 。那怎么会想到做这样一个东西呢?这要先说一下我参与过的一些项目,和在项目中接触到的一些技术点和对项目开发体检了,因为Luakit是集合了几个重要技术才能做到用Lua脚本来实现跨平台app开发的。...

    worldligang 评论0 收藏0
  • 如何使用ShareSDK实现Cocos2d-xAndroid/iOS分享与授权

    摘要:添加必须的依赖库各社交平台所需依赖库新浪微博美拍添加依赖库的方法如下配置和白名单等,各个社交平台需要的配置可以参考快速集成文档中的和白名单配置项。 Cocos2DX 简介Cocos2d-x是一套成熟的开源跨平台游戏开发框架。其引擎提供了图形渲染、GUI、音频、网络、物理、用户输入等丰富的功能,被广泛应用于游戏开发及交互式应用的构建。引擎的核心采用C++ 编写,支持使用C++、Lua或者...

    ningwang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<