android下顺利加载Lua的2个小例子

其实这是蛮久之前写的, 从网易博客拷过来的,嘿嘿,自己写了东西,总喜欢多多分享~

话说,很久之前,我写了一个小教程,可以顺利地在android里使用lua~

但是,有个问题,就是,如果用LdoFile函数来读取lua脚本,就会一直找不到路径。

目前,我找到了一个可解燃眉之急的办法,当然喇,网上已经有这种方法了,我稍微整理一下。

首先,请确认你已经能够成功地在android上使用lua脚本,否则,你可以看看这篇文章:

[小教程]解决android中加入Lua脚本后安装APK报错的问题。 (置顶的日志)

好,开始。

1.创建android项目,在asset资源文件夹下创建一个lua文件夹

2.新建一个lua文件,放到 asset\lua目录下,如asset\lua\hello.lua。注意咯,我们要把lua文件放到asset目录,很重要~

 

--文件名:hello.lua

--一个简单的函数,计算两个数相加

function plus(a, b) return a + b; end


--一个稍微不太简单的简单的函数,参数是一个Java对象,函数内容是调用Java对象value的函数

function heihei(value) value:inc(); value:inc(); return value; end


 
3.理论上,使用L.LdoFile("asset/lua/hello.lua");就可以加载lua文件了,但是实际上加载不成功(为什么?我暂时还不知道,要么等我变强,要么你去变强,然后告诉我,嘻嘻~)
4.呐,凡事呢,都有解决的办法,咱们用L.LdoString()函数来代替LdoFile()好不好?~好~!
5.怎么代替呢?对了~聪明的你猜对了~把hello.lua文件用IO流读取出来,然后保存到字符串里,然后就可以调用LdoString()函数了~
6.Java代码如下:
 
 

public class HelloLuaActivity extends Activity { private final String TAG = "HelloLuaActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView txtView = (TextView)this.findViewById(R.id.helloTxt); LuaState L = LuaStateFactory.newLuaState(); L.openLibs(); L.LdoString(getLuaString("lua/hello.lua")); // 实例1.Java调用lua函数 L.getField(LuaState.LUA_GLOBALSINDEX, "plus"); //取得lua里的plus函数 L.pushNumber(12); //传递参数1给plus函数 L.pushNumber(2132); //传递参数2给plus函数 L.call(2, 1); //调用plus函数 L.setField(LuaState.LUA_GLOBALSINDEX, "a"); //将函数的结果保存到一个参数a中 LuaObject obj = L.getLuaObject("a"); //取得参数a txtView.setText("" + obj.getString()); //打印参数a的值到TextView中 // lua调用Java对象 Value value = new Value(); L.getField(LuaState.LUA_GLOBALSINDEX, "heihei");//获取(或者说,是定位?)lua的heihei函数 try { L.pushObjectValue(value); //将value对象传递给heihei函数 } catch (LuaException e) {} L.call(1, 1); //调用heihei函数 L.setField(LuaState.LUA_GLOBALSINDEX, "v"); //函数结果保存到参数v中 LuaObject v = L.getLuaObject("v"); //读取参数v try { txtView.setText("" + v.getObject()); //打印日志 } catch (LuaException e) {} L.close(); //关闭lua } //嘿嘿,注意咯,精华来了~这个函数就是用来读取lua文件,//然后保存到一个字符串里(当然,你可以用其他方法,只要能保存成字符串) private String getLuaString(String resPath) { InputStream isread = null; byte[] luaByte = new byte[1]; try { //就是这里了,我们把lua 都放到asset目录下,这样系统就 //不会找不到文件路径了,哼~ isread = this.getAssets().open(resPath); int len = isread.available(); luaByte = new byte[len]; isread.read(luaByte); } catch (IOException e1) { } finally { if(isread != null) { try { isread.close(); } catch (IOException e) {} } } return EncodingUtils.getString(luaByte, "GBK"); } //一个简单的内部类 class Value { private int num = 0; public void inc() { num++; } public String toString() { return "num is " + num; } } }


 
7.试试看?成功了没?
8.好咯,这是笨木头的一个解决方法,不知道这样会不会有什么弊端,暂时这么做咯?
我相信,方法,一定会有的,不能放弃,加油~
 
参考文章(超级佩服作者,帮了我很大的忙):
http://yangzb.iteye.com/blog/560299
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值