cocos2d-x lua LuaJavaBridge

Flyjun-android發表於2014-12-04

cocos2d-x為我們封裝了LuaJavaBridge,避免了jni的繁瑣,現在可以輕鬆的實現lua和android端的互調了,引讀 

LuaJavaBridge - Lua 與 Java 互操作的簡單解決方案


看個例子

1、lua呼叫android端


lua程式碼

 --引入LuaJavaBridge
        local luaj = require "luaj"
        local className="com/lua/java/Test" --包名/類名
        local args = { "hello android", callbackLua }
        local sigs = "(Ljava/lang/String;I)V" --傳入string引數,無返回值
        
            --luaj 呼叫 Java 方法時,可能會出現各種錯誤,因此 luaj 提供了一種機制讓 Lua 呼叫程式碼可以確定 Java 方法是否成功呼叫。
            --luaj.callStaticMethod() 會返回兩個值
            --當成功時,第一個值為 true,第二個值是 Java 方法的返回值(如果有)
            --當失敗時,第一個值為 false,第二個值是錯誤程式碼
        local ok,ret = luaj.callStaticMethod(className,"test",args,sigs)
        if not ok then
           
            item:setString(ok.."error:"..ret)
            
        end

android端的程式碼

package com.lua.java;

/**
 * 引入Cocos2dxLuaJavaBridge
 */
import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;

public class Test {
	
	public static void test(final String param,final int luaFunc){
		System.out.println("----傳過來的引數----param:"+param);
		System.out.println("-------luaFunc:"+luaFunc);
		
		/**
		 * 給lua返回一個字串
		 */
		Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunc, "success");
		/**
		 * 移除luaId
		 */
		Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc);
	}
	
}


2、android端呼叫lua

lua程式碼,呼叫的是全域性函式

function testAndroid(parameters)
    print("--testAndroid--",parameters)

cc.Director:getInstance():endToLua()

end

android端

import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;
/**
* testAndroid lua中的方法名
* androidLua 傳遞給lua函式的引數值
*/
Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString("testAndroid", "androidLua");



相關文章