您的位置:首页 > 编程语言 > Lua

Lua脚本语言学习笔记

2013-01-21 11:49 609 查看

什么是脚本语言?

1.一种解释运行而非编译的计算机语言。

2.以文本的形式保存,在被调用时进行解释或编译。

为什么要使用LUA脚本语言?

1.提高工作效率。项目规模扩大,编译源代码所需时间变长。为了不因为一些小的改动(改变几个常量的值),就去编译整个项目,所以使用脚本语言。

2.提高创造性。使用lua脚本,不仅可以帮你初始化变量,还可以帮你创建游戏逻辑甚至是游戏对象。

3.增加扩展性。使用lua脚本,可以让玩家自己创建Mods,写一下插件(如魔兽世界允许玩家通过插件修改其用户界面)。

4.轻量级的Lua。可扩展,简易学性,效率,可移植,支持面向过程和面向对象,自动内存管理,etc。

在windows上配置lua的运行和开发环境

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"


4.编写main.cpp.

#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;
}


5.编译运行



在c或cpp中调用Lua脚本中的函数

1.Lua函数也是一种数据类型。要调用Lua的函数,首先要把函数放到堆栈上。
2.把函数所需要的参数放到堆栈上。
3.调用lua_call调用函数。
4.函数调用后,会把参数弹出,然后把函数返回值放到堆栈上。
5.在main.cpp中
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;


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: