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)php

簽名使用「(依次排列的參數型別)返回值型別」的格式,幾個例子以下:java

 

簽名解釋android

()V參數:無,返回值:無bash

(I)V參數:int,返回值:無函數

(Ljava/lang/String;)Z參數:字串,返回值:布爾值ui

(IF)Ljava/lang/String;參數:整數、浮點數,返回值:字串lua

 

這裏列出不一樣型別對應的Java簽名字串:spa

型別名型別I整數,或者Lua function F浮點數Z布爾值Ljava/lang/String;字串V Void空,僅用於指定一個Java方法不返回任何值code

 

 

 

 

cocos2d-x爲咱們封裝了LuaJavaBridge,避免了jni的繁瑣,如今能夠輕鬆的實現lua和android端的互調了,引讀 blog

LuaJavaBridge - Lua 與 Java 互操做的簡單解決方案

 

看個例子

一、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); } } 



 

二、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");
相關文章
相關標籤/搜索