在线情况
楼主
  • 头像
  • 级别
  • 徽章
  • 职务总版主
  • 声望+46
  • 积分17172
  • 经验1525983
  • 文章25461
  • 注册2003-01-20
Lua学习 1) —— Android调用变量取值与赋值
Lua脚本语言,嵌入在App中扩展开发是很不错的。

关于Android与Lua的环境搭配,我直接下载别人编好的.so与.jar(放到libs下就好了)




下面简单介绍一下Android调用Lua中的变量以及赋值


[CODE]LuaState mLuaState;
mLuaState = LuaStateFactory.newLuaState();
mLuaState.openLibs();//加载库
mLuaState.LdoString("x = 101");//执行一段lua语言,这就是对变量x赋值了
LuaObject obj = mLuaState.getLuaObject("x"); // 取得参数,以LuaObject类返回到java中
System.out.println("result: "  + obj.toString());[/CODE]
asp技术学习感谢您的参与
在线情况
2
  • 头像
  • 级别
  • 徽章
  • 职务总版主
  • 声望+46
  • 积分17172
  • 经验1525983
  • 文章25461
  • 注册2003-01-20
Lua学习 2) —— Android与Lua互调
一、Android类调用lua并回调 Android调用Lua函数,同时把类作为参数传递过去,然后再Lua中回调类的函数 调用lua [CODE] 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个返回值[/CODE] 回调的接口 [CODE] public void luaDraw(int imageId, int x, int y, int scale) {//注意也必须要是public, lua才能调用到 System.out.println("imageId, x, y, scale: " + imageId + ", " + x + ", " + y + ", " + scale); } [/CODE] lua代码 [CODE]function luaUpdate(luaCanvas) luaCanvas:luaDraw(0, 1, 2, 1) end [/CODE] 二、luajava介绍(在LuaJava库里面包含的) lua中是没有类的,luajava库中有个luajava可以创建java中的类,并调用。下面介绍几个方法 ①newInstance(className, ...) 说明:可以根据类名创建一个Java类,同时返回一个lua变量与Java类对应。这样在lua中就可以直接调用Java中的方法了。 [CODE]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[/CODE] ②bindClass(className) 说明:可以让lua中的变量对应一个Java的类(是类,不是实例),这样就可以用lua的这个变量创建实例以及调用静态类 [CODE]sys = luajava.bindClass("java.lang.System") print ( sys:currentTimeMillis() ) -- this prints the time returned by the function.[/CODE] ③new(javaClass) 说明:这个就是在②的基础上创建的 [CODE]str = luajava.bindClass("java.lang.String") strInstance = luajava.new(str)[/CODE] ④createProxy(interfaceNames, luaObject) ⑤loadLib(className, methodName) 这两个方法目前还没用到,以后会用了再介绍 以上,谢谢!
asp技术学习感谢您的参与
Page created in 0.0137 seconds with 6 queries.