游戏服务端开发也有一段时间了,现在充分体会到脚本的方便与实用。下面简单介绍一下lua有基本用法。
第一步:声明Lua对象指针
lua_State* L;
第二步:初始化lua对象指针与库
L = lua_open();
luaL_openlibs(L);
第三步:加载lua脚本文件
luaL_dofile(L, "xx.lua");
第四步:执行lua中的函数
lua_pcall(L, 2, 1, 0);
2表示传入参数的个数,1为函数返回值个数。
第五步:关闭lua指针
lua_close(L);
L = NULL;
下面通过实例说明具体用法:
头文件LuaFn.h
- extern “C”
- {
- #include “lua.h”
- #include “lualib.h”
- #include “lauxlib.h”
- };
- class CLuaFn
- {
- public:
- CLuaFn(void);
- ~CLuaFn(void);
- void Init(); //初始化Lua对象指针参数
- void Close(); //关闭Lua对象指针
- bool LoadLuaFile(const char* pFileName); //加载指定的Lua文件
- bool CallFileFn(const char* pFunctionName, int nParam1, int nParam2); //执行指定Lua文件中的函数
- private:
- lua_State* m_pState; //这个是Lua的State对象指针,你可以一个lua文件对应一个。
- };
实现文件LuaFn.cpp
- void CLuaFn::Init()
- {
- if(NULL == m_pState)
- {
- m_pState = lua_open();
- luaL_openlibs(m_pState);
- }
- }
- void CLuaFn::Close()
- {
- if(NULL != m_pState)
- {
- lua_close(m_pState);
- m_pState = NULL;
- }
- }
- bool CLuaFn:: LoadLuaFile(const char* pFileName)
- {
- int nRet = 0;
- if(NULL == m_pState)
- {
- printf(“[CLuaFn:: LoadLuaFile]m_pState is NULL./n”);
- return false;
- }
- nRet = luaL_dofile(m_pState, pFileName);
- if (nRet != 0)
- {
- printf(“[CLuaFn:: LoadLuaFile]luaL_loadfile(%s) is file(%d)(%s)./n”, pFileName, nRet, lua_tostring(m_pState, -1));
- return false;
- }
- return true;
- }
- bool CLuaFn::CallFileFn(const char* pFunctionName, int nParam1, int nParam2)
- {
- int nRet = 0;
- if(NULL == m_pState)
- {
- printf(“[CLuaFn::CallFileFn]m_pState is NULL./n”);
- return false;
- }
- lua_getglobal(m_pState, pFunctionName);
- lua_pushnumber(m_pState, nParam1);
- lua_pushnumber(m_pState, nParam2);
- nRet = lua_pcall(m_pState, 2, 1, 0);
- if (nRet != 0)
- {
- printf(“[CLuaFn::CallFileFn]call function(%s) error(%d)./n”, pFunctionName, nRet);
- return false;
- }
- if (lua_isnumber(m_pState, -1) == 1)
- {
- int nSum = lua_tonumber(m_pState, -1);
- printf(“[CLuaFn::CallFileFn]Sum = %d./n”, nSum);
- }
- return true;
- }
main.cpp
- #include “LuaFn.h”
- int _tmain(int argc, _TCHAR* argv[])
- {
- CLuaFn LuaFn;
- //LuaFn.InitClass();
- LuaFn.LoadLuaFile(“Sample.lua”);
- LuaFn.CallFileFn(“func_Add”, 11, 12);
- getchar();
- return 0;
- }
原文链接: http://blog.csdn.net/favormm/article/details/5707753