Cocos2d-x中LuaJavaBridge使用方法
android平台代码和Lua代码的交互均通过C++和Java交互,Lua再和C++交互 C++和Java的交互,可以参考 (*) 下面直接看用法: lua调用javalua中使用 luaj.callStaticMethod 来调用java静态方法: 使用场景例如提交统计,提交游戏分数 -- launch app function JniUtil:callJavaBuyLife() local argsJson = nil local sigs = "()V" local luaj = require "cocos.cocos2d.luaj" local className = "org/cocos2dx/lua/AppActivity" local ok,ret = luaj.callStaticMethod(className,"pay",{argsJson},sigs) if not ok then print("==== luaj error ==== : ",ret) return false else print("==== The JNI return is:",ret) return ret end end 在AppActivity中,加入静态方法: public static void pay() { // ... } java调用luacocos2d-x提供了Cocos2dxLuaJavaBridge带有如下方法可以使用: public static native int callLuaFunctionWithString(int luaFunctionId,String value); // 调用局部Lua-Function public static native int callLuaGlobalFunctionWithString(String luaFunctionName,String value); // 调用全局Lua-Function public static native int retainLuaFunction(int luaFunctionId); // retain一次Lua-Function public static native int releaseLuaFunction(int luaFunctionId); // release掉Lua-Function 使用场景:例如我们在支付SDK中购买完了钻石后回调到游戏中 下面提供callLuaGlobalFunctionWithString用法: function G_CallbackFromJava(msg) if msg == "success" then -- ... end end Java中对这个全局函数直接调用他,如果G_CallbackFromJava里要涉及图形计算,需要启用OpenGL线程: sInstance.runOnGLThread(new Runnable() { @Override public void run() { Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString("G_CallbackFromJava","success"); } }); 添加import语句: import org.cocos2dx.lib.Cocos2dxLuaJavaBridge; 下面提供callLuaFunctionWithString用法: function JniUtil:callJavaCallbackLua(func) local luaj = require "cocos.cocos2d.luaj" local className = "org/cocos2dx/lua/AppActivity" local args = { "callbacklua",func } local sigs = "(Ljava/lang/String;I)V" local ok = luaj.callStaticMethod(className,"callbackLua",args,sigs) if not ok then print("============= call callback error") else print("------------- call callback success") end end 某启用充值的地方,预先注册局部函数 local function onBack(msg) self:resumeGame() end JniUtil:getInstance():callJavaCallbackLua(onBack) Java中可以直接回调这个函数,也可以先保存下来这个注册的Lua局部函数,一般都是保存下来,等待启用SDK充值逻辑走完后再回调 static int luaFuncCallback = 0; public static void callbackLua(final String tipInfo,final int luaFunc){ // 根据需要,看是否要retainLuaFunction luaFuncCallback = luaFunc; // tipInfo为Lua里传来的“callbacklua”这里没用 } Java中充值后回调函数中调用游戏里的lua逻辑 sInstance.runOnGLThread(new Runnable() { @Override public void run() { Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFuncCallback,"success"); Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFuncCallback); } }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- VB窗体控件大小随窗体大小变化而变化
- DM6446开发攻略:UBOOT-2009.03移植及nand flash烧写 .
- Oracle 11g Release (11.1) 索引底层的数据结构
- c# – TlbImp.exe无法注册lib文件:“.dll不是有效的类型库
- Ruby中的Socket编程简单入门
- ruby-on-rails – Rails:使用CanCan为用户所属的每个组织分
- postgresql 预写式日志(Write Ahead Long)
- PostgreSQL数据库不支持Geometry数据类型的解决方法
- [Oracle] RAC 之 - 负载均衡深入解析
- JSON.parse 的浏览器兼容性