首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
 您现在的位置: 中国IT实验室 >> 游戏开发 >> 游戏开发文档 >> 正文
通过例子学习Lua(5) -- Lua与C的交互
来源:ChinaItLab 作者: 时间:2005-4-8


  1.简介
  
  Lua与C/C++结合是很紧密的, Lua与C++交互是建立在Lua与C的基础上的, 所
  以偶先从Lua与C讲起.
  
  正如第一讲所说, 运行Lua程序或者说调用Lua主要有两种方式:
  * 通过命令行执行"Lua"命令
  * 通过Lua的C库
  虽然此前偶们一直用第一种方式, 但偶要告诉你, 通过Lua的C库执行才是游戏中
  常用的方式.
  
  2.Lua的C库
  
  Lua的C库可以做为Shared Library调用, 但一般开发游戏时会把Lua的所有源程序
  都包含在内, 并不把Lua编译成共享库的形式. 因为Lua程序只有100多K, 而且几乎
  可以在任何编译器下Clean Compile. 带Lua源程序的另一个好处时, 可以随时对Lua
  本身进行扩充, 增加偶们所需的功能.
  
  Lua的C库提供一系列API:
  * 管理全局变量
  * 管理tables
  * 调用函数
  * 定义新函数, 这也可以完全由C实现
  * 垃圾收集器Garbage collector, 虽然Lua可以自动进行, 但往往不是立即执行的,
   所以对实时性要求比较高的程序, 会自己调用垃圾收集器
  * 载入并执行Lua程序, 这也可以由Lua自身实现
  * 任何Lua可以实现的功能, 都可以通过Lua的C API实现, 这对于优化程序的运行速度
   有帮助. 经常调用的共用的Lua程序片断可以转成C程序, 以提高效率. 连Lua都是C写的
   还有什么C不能实现呢?
  
  3.Lua与C集成的例子
  例e10.c
  /* A simple Lua interpreter. */
  #include
  #include
  int main(int argc, char *argv[]) {
  char line[BUFSIZ];
  lua_State *L = lua_open(0);
  while (fgets(line, sizeof(line), stdin) != 0)
  lua_dostring(L, line);
  lua_close(L);
  return 0;
  }
  
  编译
  Linux/Cygwin
  * 先编译Lua, 并把头文件放入include路径
  * gcc e10.c -llua -llualib -o e10
  
  VC6/VC2003
  * 先编译Lua, 在Option中设置头文件和库文件路径
  * 新建工程,在工程配置中加入附加库lua.lib和lualib.lib
  * 编译成exe
  
  运行结果
  本程序的功能是实现一个Lua解释器, 输入的每行字符都会被解释成Lua并执行.
  
  程序说明
  * #include 包含lua头文件, 然后才可以使用API
  * lua_State *L = lua_open(0) 打开一个Lua执行器
  * fgets(line, sizeof(line), stdin) 从标准输入里读入一行
  * lua_dostring(L, line) 执行此行
  * lua_close(L) 关闭Lua执行器
  
  
  例e11.c
  /* Another simple Lua interpreter. */
  #include
  #include
  #include
  int main(int argc, char *argv[]) {
  char line[BUFSIZ];
  lua_State *L = lua_open(0);
  lua_baselibopen(L);
  lua_iolibopen(L);
  lua_strlibopen(L);
  lua_mathlibopen(L);
  while (fgets(line, sizeof(line), stdin) != 0)
  lua_dostring(L, line);
  lua_close(L);
  return 0;
  }
  
  运行结果
  本程序的功能是实现一个Lua解释器, 输入的每行字符都会被解释成Lua并执行.
  与上例不同的是, 本例调用了Lua的一些标准库.
  
  程序说明
  * #include 包含Lua的标准库
  * 以下这几行是用来读入Lua的一些库, 这样偶们的Lua程序就可以有更多的功能.
  lua_baselibopen(L);
  lua_iolibopen(L);
  lua_strlibopen(L);
  lua_mathlibopen(L);
  
  4.试试看
  把上面两个小例子在你熟悉的编译器中编译执行, 并试试能否与Lua源码树一起编译
  
【责编:admin】

中国IT教育热线咨询

相关文章
dx8中关于用索引缓冲渲染索引图元
作为一个状态机的OpenGL
OGRE中的四元数与旋转
[RGSS]Sprite类方法教学
[RGSS]去掉“战斗|逃跑”选项
推荐文章

 精彩友情推荐
·Asp源码 PHP源码
·CGI源码 JSP源码
·建站书籍教程
·服务器软件 .net源码
·建站工具软件
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
 基础入门  开发文档
 最新推荐
  多数的Windows程序都需要Windows.h和Windowsx.h这两个头文件,要确保使用它们。当然,你还需要其它......
游戏引擎演化史
在Windows上安装OGRE的方法
关于滤镜遮罩概念,Sobel 遮罩
游戏开发新手入门之Windows编程
游戏开发新手入门之位图化图形
教你实现卡通渲染的另类勾边方法
游戏设计大师谈如何成为一名游戏设
Visual C#编写 3D游戏框架示例
真正的 Java 学习从入门到精通
游戏开发经验——游戏开发的基本常
  为什么要研究攻击行为在人类有记载的5600年的历史中,共计发生了14,400次战争;今天,平均一天要发生............
游戏开发中显示对话的特殊句法
游戏原型设计的介绍
网络游戏中的攻击行为
谈动作类游戏的必要条件
规则的多元分析模式
载入位图文件到DirectDraw
Archer Game Suite 是什么?
浅谈游戏企划-新手入门篇
暴雪称霸游戏业界的六大秘密绝招
骨骼动画及示例Skinned Mesh的解析
  培训中心