zoukankan      html  css  js  c++  java
  • lua调用java过程

    在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", "%s", args, "%s"", className, methodName, sig)

        return callJavaStaticMethod(className, methodName, args, sig)

    end

    return luaj

    从里面可以看到,如果传入签名为空,会自动生成一个签名,但要注意,lua中并没有整形的数据类型,如果java中接收的参数是整形,传入一个float类型的签名

    会出现错误,所以,如果要传入整形数据到java代码中,需要自己手动写入签名,整形的签名是“I”.

    转载请注明出处,from 博客园HemJohn

  • 相关阅读:
    Unity3d热更新全书-加载(一)从AssetBundle说起
    Unity3D热更新全书-脚本(三) C#LightEvil语法与调试
    Unity3D热更新全书-脚本(二) 两级分化
    Unity3D热更新全书-脚本(一) 初识脚本
    Unity3D热更新全书-何谓热更新,为何热更新,如何热更新
    C#Light/Evil合体啦
    C#最良心脚本语言C#Light/Evil,XamarinWP8Unity热更新最良心方案,再次进化.
    C#Light 再推荐,顺便介绍WP8 功能展示项目
    任意两张带透明图像的一种形状过渡效果
    FileFilter
  • 原文地址:https://www.cnblogs.com/HemJohn/p/5250161.html
Copyright © 2011-2022 走看看