关闭

开始使用lua5.1

3191人阅读 评论(0) 收藏 举报

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:86642次
    • 积分:1189
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:0篇
    • 译文:0篇
    • 评论:14条
    文章分类
    最新评论