androID平台代码和Lua代码的交互均通过C++和Java交互,Lua再和C++交互
C++和Java的交互,可以参考 (*)
下面直接看用法:
lua调用javalua中使用 luaj.callStaticmethod 来调用java静态方法:
使用场景例如提交统计,提交游戏分数
-- launch appfunction 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 endend
在AppActivity中,加入静态方法:
public static voID pay() { // ...}java调用lua
cocos2d-x提供了Cocos2dxLuaJavaBrIDge带有如下方法可以使用:
public static native int callLuaFunctionWithString(int luaFunctionID,String value); // 调用局部Lua-Functionpublic static native int callLuaGlobalFunctionWithString(String luaFunctionname,String value); // 调用全局Lua-Functionpublic static native int retainLuaFunction(int luaFunctionID); // retain一次Lua-Functionpublic static native int releaseLuaFunction(int luaFunctionID); // release掉Lua-Function
使用场景:例如我们在支付SDK中购买完了钻石后回调到游戏中
下面提供callLuaGlobalFunctionWithString用法:
function G_CallbackFromJava(msg) if msg == "success" then -- ... endend
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") endend
某启用充值的地方,预先注册局部函数
local function onBack(msg) self:resumeGame() endJniUtil: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); }});总结
以上是内存溢出为你收集整理的Cocos2d-x中LuaJavaBridge使用方法全部内容,希望文章能够帮你解决Cocos2d-x中LuaJavaBridge使用方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)