溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

cocos2d-x學(xué)習(xí)筆記(十三)lua與java通過(guò)LuaJavaBridge交互

發(fā)布時(shí)間:2020-03-02 18:29:21 來(lái)源:網(wǎng)絡(luò) 閱讀:1056 作者:wty530 欄目:游戲開(kāi)發(fā)

cocos2d-x接入支付等sdk時(shí),如果邏輯寫(xiě)在lua端,經(jīng)常會(huì)用到lua與java的交互,下面通過(guò)一個(gè)實(shí)例來(lái)實(shí)現(xiàn)lua與java的交互過(guò)程

一、lua端

lua中使用luaj.callStaticMethod調(diào)用java靜態(tài)方法

1
2
3
4
5
6
7
8
9
10
11
12
13
local function onCallBack(msg)
    --回調(diào)處理
    if msg == "success"
        --
    end
end
local function callJavaCallBackLua()
    local luaj = require "cocos.cocos2d.luaj"
    local className = "org/cocos2dx/cpp/AppActivity"
    local args = { "test", onCallBack }
    local sigs = "(Ljava/lang/String;I)V"
    local ok = luaj.callStaticMethod(className,"callJavaMethod",args,sigs)
end

以上實(shí)現(xiàn)通過(guò)lua端調(diào)用java的靜態(tài)方法callJavaMethod,并傳入2個(gè)參數(shù),一個(gè)字符串“test”和一個(gè)回調(diào)函數(shù)onCallBack


二、java端

cocos2d-x提供了Cocos2dxLuaJavaBridge帶有如下方法可以使用:

1
2
3
4
public static native int callLuaFunctionWithString(int luaFunctionId, String value);  // 調(diào)用局部Lua-Function
public static native int callLuaGlobalFunctionWithString(String luaFunctionName, String value); // 調(diào)用全局Lua-Function
public static native int retainLuaFunction(int luaFunctionId); // retain一次Lua-Function
public static native int releaseLuaFunction(int luaFunctionId); // release掉Lua-Function

在這里我們使用調(diào)用局部Lua-Function callLuaFunctionWithString來(lái)做示例

在AppActivity.java合適位置中加入代碼

1
import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;
1
static int luaFuncCallback = 0;
1
2
3
4
public static void callJavaMethod(final String test, final int luaFunc){
    //Java中可以直接回調(diào)這個(gè)函數(shù),也可以先保存下來(lái)這個(gè)注冊(cè)的Lua局部函數(shù),一般都是保存下來(lái),等待啟用SDK充值邏輯走完后再回調(diào)
    luaFuncCallback = luaFunc;
}
1
2
3
4
5
6
7
mainActivity.runOnGLThread(new Runnable() {
    @Override
    public void run() {
        Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFuncCallback, "success");
        Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFuncCallback);
    }
    });



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI