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
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");