开始使用lua5.1

lua是一个很强大脚本语言.可以用于编写AI的流程,可以编写状态机.在客户端,可以根据这个配置来生出界面.
如果要使用这个东西先还是要去下载到http://www.lua.org
在我写这文章的时候最新版本是5.1.
使用5.1的时候,如果还是看以前的那一些文章与例子可能会有问题.原因是新版本的lua初始化一些库的时候,有一个库是不能被初始化的luaopen_io(),这个函数一调用就会完蛋.
在新的版本里不是这样写的了.
L = luaL_newstate();       // 新建一个lua_Staue出来
 luaL_openlibs(L);           // 初始化所有的库
在新的版本里,我们就不需要一个一个的去调用了.两个函数搞定.(只是需要有一些太硬性了,可能有一些类库在我这个应用中是不需要使用的,有一点浪费)
这次我使用lua脚本做了一下配置文件,代替了以前使用xml文档.在C++里使用lua很重要的一点是那个堆栈.需要明白这个堆栈的工作原理.为了调试的方便.需要写一个检查堆栈的函数:

void stackDump(lua_State *L)
{
 
 int i;
 int top = lua_gettop(L);
 for (i = 1; i <= top; i++)
 { 
  int t = lua_type(L, i);
  switch (t)
  {
  case LUA_TSTRING: /* strings */
   cout<<"字符串/t"<<lua_tostring(L, i);
   break;
  case LUA_TBOOLEAN: /* booleans */
   printf(lua_toboolean(L, i) ? "true" : "false");
   break;
  case LUA_TNUMBER: /* numbers */
   printf("数字/t %g /n", lua_tonumber(L, i));
   break;
  default: /* other values */
   printf("其它值/t %s /n", lua_typename(L, t));
   break;
  }
  printf(" "); /* put a separator */
 }
 printf("::::::::::::::::结束:::::::::::::::::/n");
}

这个东西调用之后,就可以把lua_Statue中的堆栈都导出来.很方便的.
说明几个函数的作用:
luaL_newstate 使用它将会将建一个lua_Statue.出来.
luaL_openlibs 初始化全部的库
if (luaL_loadfile(L, szFileName) || lua_pcall(L, 0, 0, 0)) 这里有两个函数.一个是加载文件.第二个pcall函数调用之后将会把加载的lua文件加载到内存块中.以便后来来查询.
lua_getglobal(L,"width");这是对全局的堆栈里压一个变量,之后马上会调用查询,调用的时候pop一次,查询到了结果之后会push结果到栈里.使用lua_tonumber()函数来得到这个栈里的一个元素的内容.lua_pop()用于pop栈中的东西.查询完成之后是需要pop掉的.lua_gettable()这个函数比较的特别.当你进入了一个表之后,想查询这个表中的内容的时候就需要lua_pushstring()之后调用这个函数.就可以得到这个表中的内容了.有一些像把lua_getglobal里的过程被分开了二个部分一样的.一个有push的过程,还有一个查询的过程.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值