在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在cocos2dx框架中,有继承好的luaj文件来方便我们去使用lua调用java底层代码,注意:luaj只能使用在安卓平台下,如果在平台下使用,会出错, 所以使用前需要加平台判断,方法 如下: local luaj = require("src/cocos/cocos2d/luaj")--引入luaj库
luaj.callStaticMethod("org/cocos2dx/lua/类文件名",方法名, {参数}, 签名)
例如:
在java中的text.java文件代码如下: void showText() { .... }
lua调用代码 luaj.callStaticMethod("org/cocos2dx/lua/test","showText",{}, "()V")传递参数需要通过table存储,没用参数可以写一个空的table,最后一个参数签名是确定传参数据类型和返回数据类型。 签名中的“()”括号是填入参数类型,参数类型的签名可以打开luaj.lua文件查看,括号后的参数是返回类型。"V"是指没有返回类型, 如果参数是布尔形,返回时布尔形,签名可以写成“(Z)Z”, 贴出luaj.lua代码如下
local luaj = {}
local callJavaStaticMethod = LuaJavaBridge.callStaticMethod
local function checkArguments(args, sig) if type(args) ~= "table" then args = {} end if sig then return args, sig end
sig = {"("} for i, v in ipairs(args) do local t = type(v) if t == "number" then sig[#sig + 1] = "F" elseif t == "boolean" then sig[#sig + 1] = "Z" elseif t == "function" then sig[#sig + 1] = "I" else sig[#sig + 1] = "Ljava/lang/String;" end end sig[#sig + 1] = ")V"
return args, table.concat(sig) end
function luaj.callStaticMethod(className, methodName, args, sig) local args, sig = checkArguments(args, sig) --echoInfo("luaj.callStaticMethod(\"%s\",\n\t\"%s\",\n\targs,\n\t\"%s\"", className, methodName, sig) return callJavaStaticMethod(className, methodName, args, sig) end
return luaj
从里面可以看到,如果传入签名为空,会自动生成一个签名,但要注意,lua中并没有整形的数据类型,如果java中接收的参数是整形,传入一个float类型的签名 会出现错误,所以,如果要传入整形数据到java代码中,需要自己手动写入签名,整形的签名是“I”.
转载请注明出处,from 博客园HemJohn
|
请发表评论