又一个我喜欢的脚本语言-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夜班车,否则按侵权处理.