Cocos2d-x中LuaJavaBridge使用方法

Cocos2d-x中LuaJavaBridge使用方法,第1张

概述android平台代码和Lua代码的交互均通过C++和Java交互,Lua再和C++交互 C++和Java的交互,可以参考 (*) 下面直接看用法: lua调用java lua中使用 luaj.callStaticMethod 来调用java静态方法: 使用场景例如提交统计,提交游戏分数 -- launch appfunction JniUtil:callJavaBuyLife() lo

androID平台代码和Lua代码的交互均通过C++和Java交互,Lua再和C++交互

C++和Java的交互,可以参考 (*)

下面直接看用法:

lua调用java

lua中使用 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使用方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存