Lua是一个很好用的脚本语言,在游戏开发中可以和c++完美结合,我总结的几点使用和大家分享一下,第一c++如何调用lua脚本,第二c++如何调用脚本函数,第三脚本如何调用c++函数。写的不一定好 还请各位多指导
环境:vc6.0编译器
Lua5.1(这个很简单,大家可以自行安装)
环境准备好后我们就可以开始配置环境了:
我的lua安装目录是:E:\Program Files\Lua\5.1
一、创建工程LuaTest Win32Console Application
二、在vc工程中加入lua环境
按照上图所示配置就可以了,别忘了把路径换成自己的lua安装路径。这里配置的目的就是可以让程序中可以顺利的调用lua.
三、创建程序
/************************************************************************/
/* 事例一:(程序直接调用lua脚本写我们最熟悉的显示helloword) */
/************************************************************************/
创建HelloWord.cpp
#include <iostream>
#include "lua.hpp"
using namespace std;
/* 在这种结构中保持状态的所有信息。*/
lua_State* L;
int main ( int argc, char *argv[] )
{
/* 初始化lua*/
L = lua_open();
/* 加载 lua libraries */
luaL_openlibs(L);
/* 调用脚本 */
luaL_dofile(L, "HelloWordLua.lua");
/* 销毁所有lua state中的对象 */
lua_close(L);
return 0;
}
HelloWordLua.lua
print("hello world")
/************************************************************************/
/* 事例二(c++程序调用lua脚本函数) */
/************************************************************************/
#include <iostream>
#include "lua.hpp"
using namespace std;
/* 在这种结构中保持状态的所有信息。*/
lua_State* L;
int luaswap ( int x, int y )
{
/* 函数名 */
lua_getglobal(L, "swap");
/* 参数压栈*/
lua_pushnumber(L, x);
/* 参数压栈 */
lua_pushnumber(L, y);
/* 调用环数 2个参数1个返回值*/
lua_call(L, 2, 1);
/* get the result */
int result = (int)lua_tointeger(L, -1);
lua_pop(L, 1);
return result;
}
int main ( int argc, char *argv[] )
{
/* 初始化lua*/
L = lua_open();
/* 加载 lua libraries */
luaL_openlibs(L);
/* 调用脚本 */
luaL_dofile(L, "swap.lua");
/*调用函数*/
int result = luaswap(20,50);
cout<<"两个数中大的数为:"<<result<<endl;
/* 销毁所有lua state中的对象 */
lua_close(L);
return 0;
}
swapforl.lua
function swap(x,y)
if x > y then
print("lua printx"..x)
return x
else
print("lua printy"..y)
return y
end
end
事例三(lua脚本调用c++程序函数)
/************************************************************************/
/* 事例三(lua脚本调用c++程序函数) */
/*这个在游戏中还是比较常用的,游戏世界中一些写好的接口可以供lua脚本调用*/
/************************************************************************/
#include <iostream>
#include "lua.hpp"
using namespace std;
/* 在这种结构中保持状态的所有信息。*/
lua_State* L;
int swap(lua_State *L)
{
/* 取出参数个数 */
int n = lua_gettop(L);
int x,y,nMin,nMax;
if ( n != 2)
{
return 0;
}
/* 取出两个参数*/
x = lua_tonumber(L,1);
y = lua_tonumber(L,2);
nMin = x < y?x:y;
nMax = x < y?y:x;
/* 压栈 实际就是返回值 */
lua_pushnumber(L,nMin);
lua_pushnumber(L,nMax);
/* 返回值个数*/
return 2;
}
int main ( int argc, char *argv[] )
{
/* 初始化lua*/
L = lua_open();
/* 加载 lua libraries */
luaL_openlibs(L);
/*注册函数*/
lua_register(L, "swap", swap);
/* 调用脚本 */
luaL_dofile(L, "swapforc.lua");
/* 销毁所有lua state中的对象 */
lua_close(L);
return 0;
}
swapforc.lua
minnum,maxnum = swap(20,50)
print("minnum:"..minnum.."maxnum:"..maxnum)