2014-07-09
一、Android类调用lua并回调
Android调用Lua函数,同一时候把类作为參数传递过去。然后再Lua中回调类的函数
调用lua
mLuaState = LuaStateFactory.newLuaState(); mLuaState.openLibs(); mLuaState.LdoString(KKLua.loadAssetsString(mContext, "lua/swallow.lua"));//将lua转换为字符串 mLuaState.getField(LuaState.LUA_GLOBALSINDEX, "luaUpdate");//获取lua中的function mLuaState.pushJavaObject(this);//传递參数 mLuaState.call(1, 0);//一个參数, 0个返回值
回调的接口
public void luaDraw(int imageId, int x, int y, int scale) {//注意也必需要是public, lua才干调用到 System.out.println("imageId, x, y, scale: " + imageId + ", " + x + ", " + y + ", " + scale); }lua代码
function luaUpdate(luaCanvas) luaCanvas:luaDraw(0, 1, 2, 1) end
二、luajava介绍(在LuaJava库里面包括的)
lua中是没有类的。luajava库中有个luajava能够创建java中的类。并调用。
以下介绍几个方法
①newInstance(className, ...)
说明:能够依据类名创建一个Java类。同一时候返回一个lua变量与Java类相应。这样在lua中就能够直接调用Java中的方法了。
obj = luajava.newInstance("java.lang.Object") -- obj is now a reference to the new object -- created and any of its methods can be accessed. -- this creates a string tokenizer to the "a,b,c,d" -- string using "," as the token separator. strTk = luajava.newInstance("java.util.StringTokenizer", "a,b,c,d", ",") while strTk:hasMoreTokens() do print(strTk:nextToken()) end
②bindClass(className)
说明:能够让lua中的变量相应一个Java的类(是类。不是实例),这样就能够用lua的这个变量创建实例以及调用静态类
sys = luajava.bindClass("java.lang.System") print ( sys:currentTimeMillis() ) -- this prints the time returned by the function.
③new(javaClass)
说明:这个就是在②的基础上创建的
str = luajava.bindClass("java.lang.String") strInstance = luajava.new(str)
⑤loadLib(className, methodName)
这两个方法眼下还没用到。以后会用了再介绍
以上。谢谢!