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

 

 

转载于:https://www.cnblogs.com/xingchong/p/11016729.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值