又一个我喜欢的脚本语言-Lua

又一个我喜欢的脚本语言-Lua

对,是又一个我喜欢的脚本语言-Lua,因为我还喜欢另外一个超级好用的脚本语言 – python,因为的库超级多,可以做任何事情,从后台到GUI的界面程序都可以。今天说说Lua,这个语言在2010年的时候第一次听说,是因为当时我们在做一个游戏,当时讨论说,游戏的逻辑部分看要不要用lua实现,不过后来并没有用Lua,而是全部用C++实现,因为没有愿意去学lua。

用lua去实现游戏的逻辑部分确实是非常灵活的,因为lua的脚本在不需要重新编译整个项目(游戏)的情况下,就可以改变逻辑。这方面的非常出名的例子就是WOW了,其引擎是C++写的,而逻辑部分就是用Lua所写。

下面说说lua的优点:

1. lua的解释器非常小,只有几百K而已,python的解释器上M了

2. lua的执行速度要比python快

3. lua和c/c++的交互更加的方便,c/c++调用python,然后在python做完一些事情后再调用回c/c++的函数易如反掌。

  下面举个例子:

 

// 计算点到圆心的距离
static int distance(lua_State* L)
{
    int pos[4] = {0};
      
    // 用lua_tonumber()获取
    // 从Lua传递过来的点(pos[0],pos[1])和
    // 圆心(pos[2],pos[3])的坐标
    for(int i = 0; i < 4; ++i)
    {
        // 获取从Lua传递过来的参数数据
        // 这里需要注意的是,这些数据是以1开始的
        // 所以我们这里用i+1作为序号
        // 如果序号是0,得到的是参数数据的个数
        pos[i] = luaL_checkint(L, i+1); 
    }
     
    // 用C++的数学函数计算点到圆心的距离
    int a = pow(abs(pos[0]-pos[2]),2);
    int b = pow(abs(pos[1]-pos[3]),2);
      
    double dis = sqrt(a + b);
 
    // 将计算得到的距离压入栈顶作为返回结果
    lua_pushnumber(L,dis);
     
    return 1; // 返回返回值的个数
}
// C++程序执行Lua脚本  
int main() 
    // Lua解释器指针 
    lua_State* L = nullptr
     
    // 创建Lua解释器
    L = luaL_newstate();
    if(nullptr != L)
    {
        luaL_openlibs(L);// 打开Lua库 
        lua_register(L, "distance", distance);// 注册lua基本库,绑定之
        // 执行Lua脚本snake.lua
        luaL_dofile(L, "snake.lua"); 
        //...
    }
     
    return 0; 
}
—————-上面是c++部分,下面是lua脚本———————-

--通过调用C++的distance函数,
--判断点(x,y)是否在场景内
function inscene(x,y)
    --调用C++的distance函数,
    --计算点(x,y)到场景中心(50,50)的距离
    local dis = distance(x,y,50,50);
       
    return dis < 50
end

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章转载自:IT夜班车,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *