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