zoukankan      html  css  js  c++  java
  • luaj使用 方法签名规则 Cocos2dxLuaJavaBridge

    function AndroidHandler:getParamJson()
        local args = {nil}
        local ok,ret = luaj.callStaticMethod(className, "getParamJson", args, "()Ljava/lang/String;")
        assert(ok, "luaj call login error!")
        cclog("ret = "..tostring(ret))
    end
     
     

    public static int getNum(int n){ return n;} -- Java类的名称local className =“com/qeeplay/frameworks/CheShi”--呼叫的Java方法名local method = 'getDisplayWidth' --呼叫Java方法需要的参数local n = 10 local args = { n } --定义签名--参数:[I]nteger--返回值:[I]nt local sig =“(I)I”--呼叫Java方法local_,screenwidth = luaj.callStaticMethod(className,method,args,sig)

    签名使用“(依次排列的参数型别)返回值型别”的格式,几个例子如下:

    签名解释

    ()V参数:无,返回值:无

    (I)V参数:int,返回值:无

    (Ljava/lang/String;)Z参数:字串,返回值:布尔值

    (IF)Ljava/lang/String;参数:整数、浮点数,返回值:字串

    这里列出不同型别对应的Java签名字串:

    型别名型别I整数,或者Lua function F浮点数Z布尔值Ljava/lang/String;字串V Void空,仅用于指定一个Java方法不返回任何值

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

  • 相关阅读:
    第三周作业
    第二周作业
    实时控制软件大作业总结
    实时控制软件大作业四
    实时控制软件大作业三
    实时控制软件大作业二
    轨迹插补程序
    实时控制软件大作业博客一
    实时控制软件设计第四周作业
    实时控制软件设计第三周作业-1
  • 原文地址:https://www.cnblogs.com/xingchong/p/11016729.html
Copyright © 2011-2022 走看看