[置顶] Lua脚本语言学习笔记

什么是脚本语言?

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.编译运行

[置顶] Lua脚本语言学习笔记_第1张图片

在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;




你可能感兴趣的:([置顶] Lua脚本语言学习笔记)