1.需要注意如果在Java主线程直接调用的话,不可用来进行UI操作(也就是调用的Lua方法中不要有打UI界面的操作)
2.如果有需要调用Lua界面操作,那就需要使用 Cocos2dxHelper.runOnGLThread() 方法中调用(也就是在游戏GL线程中调用,使其保证在同一线程中操作——个人理解)
网上很多Java和Lua 的互调方法,但是好多都没有说怎么去传参数和回调一些数值一类的东西,下面我在此记录一下,也方便后边玩家的学习。
Lua方法调用Java,传入一个回调方法,代码如下:
--Lua 调用 Java
function PlatformTools.showAdsUI(typeId)
--typeId
local function callLua(event)
local parms = {
typeId = typeId,
code = event
}
--event 1 成功,0 失败
end
local className = "org/cocos2dx/lua/AppActivity"
local methodName = "showAdsUI"
-- 这里的参数 I 指的是 回调方法,如果传字符串过去, "Ljava/lang/String;"
local ok,ret = luaj.callStaticMethod(className,methodName,{callLua},"(I)V")
if not ok then
print("luaj >> showAdsUI ERROR:", ret)
return false
end
return true
end
Java这边的方法是
// luaFuncIds 指的是 Lua传过来的回调方法
public static void showAdsUI(final int luaFuncIds) {
int luaFuncId = luaFuncIds;
}
//回调lua
public static void call2lua(String value){
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFuncId,value);
// 回调完清除掉
Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFuncId);
}