最近发现要恶补的东西实在是太多了,DX还没学完,现在发现还要用Lua脚本语言,于是,我的笔记又加了一个系列,Lua学习笔记。
一.简介
Lua是一门小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。
一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
总之,介绍就这么多,从百度百科上抄的Lua是游戏中最常用的脚本语言,所以这也是本人学习Lua的目的。
二.编译Lua
从Lua官方网站上下载Lua源码包,地址: http://www.lua.org/download.html
解压,到一个文件夹,我们就可以看到Lua的源码啦。其实这个是一个C语言编写的项目,其中有Makefile文件,在Linux下可以直接根据这个编译。在windows下,我们可以使用强大的VS来编译。
这里我们选择编译一个静态的Lib库,供程序使用。
打开VS,建立一个新解决方案,在解决方案中添加一个空项目,命名为LuaLib,将源代码放在目录下。项目上右键-选择添加现有项,将刚才放在目录中的.h和.c文件全部添加到项目中:
然后需要修改两个地方,因为这个代码里面有两个地方是有main函数的,而我们使用Lua是作为一个模块引入的,所以不需要main函数的。我们把这两个main函数改一下名:
第一个在Lua.c中,将main函数改为lua_main
第二个在Luac.c中,将main函数改为luac_main
下面我们修改一下编译的类型,在项目上右键->属性->配置属性->常规->配置类型 改为静态库.lib
好了,这下我们就可以愉快的编译啦,在Debug目录下生成LuaLib.lib文件:
三.使用Lua写一个Hello World
编译好了Lua文件,我们就可以写Lua啦,不过在使用之前,还是要配置一下头文件目录和库目录。
1.在同一个解决方案下再建立一个项目工程:LuaTest。
2.通过项目->属性->VC++目录,设置包含目录为刚才源代码中.h文件所在的目录。
3.通过项目->属性->VC++目录,设置库目录为刚才生成的.lib所在的目录。
4.注意还需要添加之前编译好的Lualib.lib文件,这里通过项目->属性->连接器->附加依赖项添加了,否则需要在程序中通过#pragma comment(lib, "lualib.lib")来添加
5.好了,环境配置就到这里啦!现在写一个C++的程序,用来调用Lua:
// LuaTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
//因为Lua是C的函数,而我们的程序是C++的,所以要使用extern "C"引入头文件
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "luaconf.h"
}
//注意还需要添加之前编译好的Lualib.lib文件,这里通过项目->属性->连接器->附加依赖项添加了
//否则需要 #pragma comment(lib, "lualib.lib")来添加
int _tmain(int argc, _TCHAR* argv[])
{
//打开lua
lua_State* L = luaL_newstate();
//加载lib文件
luaL_openlibs(L);
//执行lua脚本文件
luaL_dofile(L, "test.lua");//这里的test.lua为下面要使用的lua脚本文件
//结束
lua_close(L);
system("pause");
return 0;
}
6.编译,不出意外的话会生成一个LuaTest.exe程序。
7.进入程序所在的目录新建一个脚本文件,命名为test.lua,就写一句hello world吧!
--还是Hello World!
print("Hello world!\n")
8.执行LuaTest.exe文件,得到下面的结果:
四.几点说明
1.lua是用C语言写的,我们引入C语言函数的时候,需要使用extern "C"关键字来告诉这个函数是C语言的,防止C++编译器把它编译成C++格式的。
2.在Lua中,注释使用--