1.一种解释运行而非编译的计算机语言。
2.以文本的形式保存,在被调用时进行解释或编译。
1.提高工作效率。项目规模扩大,编译源代码所需时间变长。为了不因为一些小的改动(改变几个常量的值),就去编译整个项目,所以使用脚本语言。
2.提高创造性。使用lua脚本,不仅可以帮你初始化变量,还可以帮你创建游戏逻辑甚至是游戏对象。
3.增加扩展性。使用lua脚本,可以让玩家自己创建Mods,写一下插件(如魔兽世界允许玩家通过插件修改其用户界面)。
4.轻量级的Lua。可扩展,简易学性,效率,可移植,支持面向过程和面向对象,自动内存管理,etc。
1.下载LuaForWindows,安装Lua。
2.把Lua安装目录下的include和lib加入IDE的目录里面。
3.Lua自带了一个脚本编辑器,所以新建一个文本test.lua,右键点击Edit Script就进入了编辑器。
lua=1; print ("Hello") print (lua); while lua == 1 do end
保存
4.双击test.lua就能看到效果。
在Code::Blocks IDE中编写Lua与C/C++交互的程序
1.新建一个控制台工程test.cbp。
2.加入安装目录的lib加入到project->build options->linker settings里面。
3.编写test.lua文件,放到和test.cbp在一个文件夹下。
age=10; name="yangzan"; salary=10000; height=180; isMale=true; print "this is test.lua"
#include <iostream> extern "C" { #include <lua.h> #include <lualib.h> #include <lauxlib.h> #include <string.h> } using namespace std; class Human { private: int age; char name[10]; double salary; double height; bool isMale; public: void init(lua_State *ls) { lua_settop(ls,0); lua_getglobal(ls,"age"); lua_getglobal(ls,"name"); lua_getglobal(ls,"salary"); lua_getglobal(ls,"height"); lua_getglobal(ls,"isMale"); if (lua_isnumber(ls,1) == 1) { age=(int)lua_tonumber(ls,1); } if (lua_isstring(ls,2) == 1) { strcpy(name,lua_tostring(ls,2)); } if (lua_isnumber(ls,3) == 1) { salary=(double)lua_tonumber(ls,3); } if (lua_isnumber(ls,4) == 1) { height=(double)lua_tonumber(ls,4); } if (lua_isboolean(ls,5) == 1) { isMale=(bool)lua_toboolean(ls,5); } } void printInfo() { cout<<age<<endl; cout<<name<<endl; cout<<salary<<endl; cout<<height<<endl; cout<<isMale<<endl; } }; int main() { Human hm; lua_State * L; L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L,"test.lua"); hm.init(L); hm.printInfo(); lua_close(L); getchar(); return 0; }
double a,b,ave; a=10.09; b=31.123; lua_getglobal(L,"average"); //把函数放到堆栈上 if (lua_isfunction(L,-1) == 1) //判断栈顶元素是不是函数 { lua_pushnumber(L,a); //把a放到栈顶 lua_pushnumber(L,b); //把b放到栈顶 lua_call(L,2,1); //调用average函数 //第二个参数是被放到堆栈上的参数个数 //第三个参数是函数返回参数的个数(lua函数可以返回多个值) //调用函数后,参数会自动弹出,并把函数返回值放在栈上 ave=lua_tonumber(L,-1); } lua_pop(L,1); cout<<"a和b平均值为"<<ave<<endl;6.在test.lua中
function average(a,b) return (a+b)/2 end;