C++调用Lua读取配置文件的一个简单例子

来源:互联网 发布:mac艺术字体下载大全 编辑:程序博客网 时间:2024/06/08 19:05
// 定义个Lua处理类
#ifndef _LUA_HANDLER_H_#define _LUA_HANDLER_H_extern "C"{#include <lua.h>#include <lualib.h>#include <lauxlib.h>};/*** Lua处理类*/class LuaHandler{public:// 构造函数LuaHandler(){// 打开lua虚拟机m_pLuaState = lua_open();// 打开lua基础的库luaopen_base(m_pLuaState);// 打开lua字数学库luaopen_math(m_pLuaState);// 打开lua字符串库luaopen_string(m_pLuaState);}// 析构函数~LuaHandler(){// 关闭lua虚拟机lua_close(m_pLuaState);}// 加载lua文件voidLoadFile(const char* filename){int nRet = luaL_dofile(m_pLuaState,filename);if (nRet != 0){throw exception("can not open lua file!");}}// 获取全局字符串stringGetGlobalString(const char* varName){lua_getglobal(m_pLuaState,varName);int nRet = lua_isstring(m_pLuaState,-1);if (nRet == 0){throw exception("there is not a string!");return "";}return lua_tostring(m_pLuaState,-1);}// 设置lua堆栈顶部voidSetTop(int v){lua_settop(m_pLuaState,v);}// 获取全局数值型变量doubleGetGlobalNum(const char* varName){lua_getglobal(m_pLuaState,varName);int nRet = lua_isnumber(m_pLuaState,-1);if (nRet == 0){throw exception("there is not a number!");return 0;}return lua_tonumber(m_pLuaState,-1);}lua_State*GetLuaState(){return m_pLuaState;}private:lua_State*m_pLuaState;};#endif
//具体的调用如下
void Config::LoadConfig(){// Lua处理器LuaHandler lua_hadndler;// 加载lua文件lua_hadndler.LoadFile("E:\\Work\\cocos2d-x-3.4\\MyGame\\testAll\\proj.win32\\Debug.win32\\config\\config.lua");//// 设置堆栈lua_hadndler.SetTop(0);// 读取lua配置文件m_strPlayerActionConfigFile= lua_hadndler.GetGlobalString("player_action_configfile"); m_strMonsterActionConfigFile=  lua_hadndler.GetGlobalString("monster_action_configfile");m_strSkillActionConfigFile= lua_hadndler.GetGlobalString("skill_action_configfile"); m_strPlayerName= lua_hadndler.GetGlobalString("PlayerName"); m_fProcessInterval= lua_hadndler.GetGlobalNum("ProcessInterval");m_fPlayerSpeed= lua_hadndler.GetGlobalNum("PlayerSpeed");m_fPlayerSpeedIncrement= lua_hadndler.GetGlobalNum("PlayerSpeedIncrement");m_fPlayerDamageValue= lua_hadndler.GetGlobalNum("PlayerDamageValue");m_fPlayerDamageValueIncrement= lua_hadndler.GetGlobalNum("PlayerDamageValueIncrement");m_fMonsterSpeed= lua_hadndler.GetGlobalNum("MonsterSpeed");m_fMonsterSpeedIncrement= lua_hadndler.GetGlobalNum("MonsterSpeedIncrement");m_fMonsterDamageValue= lua_hadndler.GetGlobalNum("MonsterDamageValue");m_fMonsterDamageValueIncrement= lua_hadndler.GetGlobalNum("MonsterDamageValueIncrement");m_fMonsterEmpiricalValue= lua_hadndler.GetGlobalNum("MonsterEmpiricalValue");m_fMonsterEmpiricalValueIncrement= lua_hadndler.GetGlobalNum("MonsterEmpiricalValueIncrement");m_fPlayerBloodReturnValue= lua_hadndler.GetGlobalNum("PlayerBloodReturn");m_fPlayerMagicReturnValue<span style="white-space:pre"></span>= lua_hadndler.GetGlobalNum("PlayerMagicReturn");m_fMonsterBloodReturnValue= lua_hadndler.GetGlobalNum("MonsterBloodReturn");m_nMonsterMaxCount= (int)lua_hadndler.GetGlobalNum("MonsterMaxCount");m_nEquipmentBloodMaxCount= (int)lua_hadndler.GetGlobalNum("EquipmentBloodMaxCount");m_nEquipmentMagicMaxCount= (int)lua_hadndler.GetGlobalNum("EquipmentMagicMaxCount");m_fEquipmentBloodReturnValue= lua_hadndler.GetGlobalNum("EquipmentBloodReturnValue");m_fEquipmentMagicReturnValue= lua_hadndler.GetGlobalNum("EquipmentMagicReturnValue");m_strEquipmentBloodPicName= lua_hadndler.GetGlobalString("EquipmentBloodPicName");m_strEquipmentMagicPicName<span style="white-space:pre"></span>=lua_hadndler.GetGlobalString("EquipmentMagicPicName");m_fPlayerPosition_X= lua_hadndler.GetGlobalNum("PlayerPosition_X");m_fPlayerPosition_Y= lua_hadndler.GetGlobalNum("PlayerPosition_Y");m_fBossPosition_X= lua_hadndler.GetGlobalNum("BossPosition_X");m_fBossPosition_Y<span style="white-space:pre"></span>= lua_hadndler.GetGlobalNum("BossPosition_Y");m_strSelfIndicatorFileName= lua_hadndler.GetGlobalString("self_indicator");m_strUIFileName= lua_hadndler.GetGlobalString("UI_FileName");m_strMap1FileName= lua_hadndler.GetGlobalString("Map1_FileName");m_strMap2FileName= lua_hadndler.GetGlobalString("Map2_FileName");m_strMap3FileName= lua_hadndler.GetGlobalString("Map3_FileName");m_strMap4FileName= lua_hadndler.GetGlobalString("Map4_FileName");m_fPortalPosition_X= lua_hadndler.GetGlobalNum("PortalPosition_X");m_fPortalPosition_Y= lua_hadndler.GetGlobalNum("PortalPosition_Y");return;}


附Lua的配置文件如下:

-- RPG_01的配置文件--myTable = {id = '001',name = "mo bin sheng"};-- 下面是各个配置文件的文件名 begin---player_configfile = "config/player.xml";player_action_configfile = "config/player-action.xml"monster_action_configfile = "config/monster-action.xml"skill_action_configfile = "config/skill.xml"-- 下面是各个配置文件的文件名 end---ProcessInterval = 10.0-- 玩家的配置 begin---PlayerName= "role3"-- 玩家的名字PlayerSpeed = 3.0-- 其实时候玩家的速度PlayerSpeedIncrement = 0.1-- 升级的时候玩家速度的增加量PlayerDamageValue = 0.5-- 初始时候玩家的伤害值PlayerDamageValueIncrement = 0.1-- 升级的时候玩家的伤害值的增加量PlayerBloodReturn = 0.05-- 单位时间内玩家回复血量的速度PlayerMagicReturn = 0.05-- 单位时间内玩家回复魔量的速度PlayerPosition_X = 100;-- 玩家的起始坐标PlayerPosition_Y = 100;-- 玩家的起始坐标-- 玩家的配置 end----- 怪物的配置 begin---MonsterSpeed = 3.0-- 怪物的起始速度MonsterSpeedIncrement = 0.05-- 怪物升级时候速度的增加量MonsterDamageValue = 0.1-- 怪物的起始伤害值MonsterDamageValueIncrement = 0.1-- 怪物升降时伤害值的增加量MonsterEmpiricalValue = 20-- 怪物一级的时候拥有的经验值MonsterEmpiricalValueIncrement = 10-- 怪物升级时候经验值的增加量MonsterBloodReturn = 0.02-- 怪物单位时间内回血量MonsterMaxCount = 8-- 在屏幕上显示的最大的怪物的数量BossPosition_X = 500;-- Boss在屏幕上的起始位置BossPosition_Y = 400;-- Boss在屏幕上的起始位置-- 怪物的配置 end----- 装备的配置 begin---EquipmentBloodMaxCount = 4-- 在屏幕上掉下的血瓶的最大数量EquipmentBloodReturnValue = 10-- 吃了一个血瓶回复的血量EquipmentBloodPicName = "RPG_Resource/prop_icon/propIcon_50000010.png"-- 血瓶的文件名EquipmentMagicMaxCount = 4-- 掉在地上的魔瓶的最大数量EquipmentMagicReturnValue = 10-- 吃了一个魔瓶回复的魔法量EquipmentMagicPicName = "RPG_Resource/prop_icon/propIcon_50000011.png"-- 魔瓶的文件名-- 装备的配置 end----- UI以及界面配置 begin--self_indicator = "RPG_Resource/ui/self_indicator.png"-- 显示人物/怪物被选中的光圈的文件名UI_FileName = "RPG_Resource/xUi/xUi_1.ExportJson"-- UI配置的文件名Map1_FileName = "RPG_Resource/xMap/map1_1.ExportJson";-- 章节1地图的文件名Map2_FileName = "RPG_Resource/xMap/map2_1.ExportJson";-- 章节2地图的文件名Map3_FileName = "RPG_Resource/xMap/map3_1.ExportJson";-- 章节3地图的文件名Map4_FileName = "RPG_Resource/xMap/map4_1.ExportJson";-- 章节4地图的文件名PortalPosition_X = 800;PortalPosition_Y = 500;-- UI以及界面配置 end--



0 0
原创粉丝点击