Lua 与java 互调

32 篇文章 0 订阅
26 篇文章 2 订阅

首先用 cocos code ide 编写lua 代码

用 adt 编写 java 代码,只要修改了java代码,就必须用adt重新部署一次,再用ide运行runtime就有效果,否则看不到修改java代码后的效果,而且如果修改了方法,会因为找不到方法导致程序崩溃

Lua 调用 java

Java方法中的所有参数必须加final关键字如:

public static Stringtest1(final String msg,finalint num){

              Log.e("test1"," --- msg="+msg+" ,num= "+num);

              return new String("I am Android");

       }

 

lua中得代码

-- lua 调用 java

    local function testLuaj()

       local args = { "I am Lua" , 3455 } --传进java方法的参数

       local signs = "(Ljava/lang/String;I)Ljava/lang/String;"--方法参数返回值类型

       local luaj = require "luaj" --获取lua虚拟机

       local className = "org/cocos2dx/lua/AppActivity"--类名

       local methodName = "test1" --方法名

       local ok , ret = luaj.callStaticMethod(className ,methodName,args , signs)

       -- ok : 是否调用成功 , ret :调用成功后java的返回值

       if not ok then

           print("luajerror:",ret)

       else

           print("Thereturn value = "..ret)

       end

end

 

Java 调用 lua

Lua 中的代码

    local function callbackLua(param)

       if "success"== param then

           print("javacall back success")

       end

    end

    args= { "callbacklua",callbackLua }

    sigs= "(Ljava/lang/String;I)V"

    ok= luaj.callStaticMethod(className,"callbackLua",args,sigs)

    if not ok then

       print("callcallback error")

end

 

java中的代码

       public static void callbackLua(final String tipInfo,finalint luaFunc){

              Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunc,"success");

              Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc);

       }

 

lua test里面的范例

lua中的代码

if (cc.PLATFORM_OS_ANDROID ==targetPlatform) then

           localargs = { 2 ,3}

           localsigs = "(II)I"

           localluaj = require "luaj"

           localclassName = "com/cocos2dx/sample/LuaJavaBridgeTest/LuaJavaBridgeTest"

           localok,ret  = luaj.callStaticMethod(className,"addTwoNumbers",args,sigs)

           if not ok then

                print("luaj error:",ret)

           else

                print("The ret is:",ret)

           end

 

           local function callbackLua(param)

                if"success"== paramthen

                    print("java call back success")

                end

           end

           args = { "callbacklua", callbackLua }

           sigs = "(Ljava/lang/String;I)V"

           ok = luaj.callStaticMethod(className,"callbackLua",args,sigs)

           if not ok then

                print("call callback error")

           end

        end

 

java中的代码

public static int addTwoNumbers(finalint num1,finalint num2){

              return num1 + num2;

       }

      

       public static void callbackLua(final String tipInfo,finalint luaFunc){

//这里调用的时lua中得局部函数,通过lua传过来的luaFunc为标示找到对应的局部函数

              Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunc,"success");

              Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc);

       }


java主动调lua,functionName为lua中得全局函数,不能有local关键字

Cocos2dxLuaJavaBridge.callGlobalLuaFunctionWithString("functionName","success");



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝶泳奈何桥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值