cocos2d-x接入支付等sdk时,如果逻辑写在lua端,经常会用到lua与java的交互,下面通过一个实例来实现lua与java的交互过程
一、lua端
lua中使用luaj.callStaticMethod调用java静态方法
1 2 3 4 5 6 7 8 9 10 11 12 13 | local function onCallBack(msg)
--回调处理
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
|
以上实现通过lua端调用java的静态方法callJavaMethod,并传入2个参数,一个字符串“test”和一个回调函数onCallBack
二、java端
cocos2d-x提供了Cocos2dxLuaJavaBridge带有如下方法可以使用:
1 2 3 4 | public static native int callLuaFunctionWithString( int luaFunctionId, String value);
public static native int callLuaGlobalFunctionWithString(String luaFunctionName, String value);
public static native int retainLuaFunction( int luaFunctionId);
public static native int releaseLuaFunction( int luaFunctionId);
|
在这里我们使用调用局部Lua-Function callLuaFunctionWithString来做示例
在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){
luaFuncCallback = luaFunc;
}
|
1 2 3 4 5 6 7 | mainActivity.runOnGLThread( new Runnable() {
@Override
public void run() {
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFuncCallback, "success" );
Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFuncCallback);
}
});
|