[cocos2dx笔记005]一个字符串管理配置类
为了正确显示中文。或支持多语言,我这里定义一个简单的字符串管理类,来满足上述要求。
这个类使用了我的开源码中的XAnsiString和XMap。TextIni这几个类。能够在我的开放代码找到下载。
以下是代码://字符串资源管理器
#define _X_STRING_MANAGER_H_
#include <xstring.h>
#include <xini.h>
#include <xmap.h>
#include <xset.h>
#include <xsingleton.h>
namespace zdh
{
typedef XMap<XAnsiString, XAnsiString> TStringKeyValue;
typedef XMap<XAnsiString, TStringKeyValue> TStringSection;
class XStringMgr
{
public:
XStringMgr()
{}
~XStringMgr()
{
m_Map.Clear();
}
XInt Load(const XAnsiString & paramFileName, bool paramClear = true)
{
if (paramClear) m_Map.Clear();
XIniText stIni;
if (!stIni.Load(paramFileName)) return ERR_FAIL;
for (int i = 0; i < stIni.getSectionCount(); i++)
{
XIniText::TSection * pSection = stIni.getSection(i);
TStringKeyValue & stKeyValue = m_Map[pSection->getSectionName()];
for (int j = 0; j < pSection->getLength(); j++)
{
XIniText::TEntry * pEntry = pSection->getEntry(j);
if (isNULL(pEntry)) continue;
if (pEntry->getEntryType() != EIET_COMMON_ENTRY) continue;
XIniText::TEntryCommon * pCommonEntry = dynamic_cast<XIniText::TEntryCommon *>(pEntry);
if (isNULL(pCommonEntry)) continue;
stKeyValue[pCommonEntry->getKey().getField()] = pCommonEntry->getValue().getField();
}
}
return ERR_OK;
}
//取指定字符串对象。假设不存在,返回NULL
const XAnsiString * getStringEx(const XAnsiString & paramSection, const XAnsiString & paramKey)
{
int iSectionIndex = m_Map.getIndexBykey(paramSection);
if (!m_Map.isValidIndex(iSectionIndex)) return NULL;
const TStringKeyValue & stKeyValue = m_Map.getValue(iSectionIndex);
int iValueIndex = stKeyValue.getIndexBykey(paramKey);
if (!stKeyValue.isValidIndex(iValueIndex)) return NULL;
return &stKeyValue.getValue(iValueIndex);
}
//取指定的字符串,假设不存在,则返回空串
const char * getString(const XAnsiString & paramSection, const XAnsiString & paramKey)
{
const XAnsiString * pRet = getStringEx(paramSection, paramKey);
if (isNULL(pRet)) return "";
else return pRet->c_str();
}
const TStringSection & getMap() const
{
return m_Map;
}
private:
TStringSection m_Map;
};
}
#define STRING_MGR zdh::XSingletonSample<zdh::XStringMgr, 0>::getInstance()
#define STRING_SECTION_MAIN "main"
#define STRING_PLAY (STRING_MGR->getString(STRING_SECTION_MAIN, "play"))
#define STRING_FONT (STRING_MGR->getString(STRING_SECTION_MAIN, "font"))
#endif
使用样例
if (zdh::isNotOK(STRING_MGR->Load(strStringMgrFileName)))
{
STREAM_INFO << "load "<<strStringMgrFileName << "Fail!";
return false;
}
else
{
STREAM_INFO << "Load String:" << STRING_PLAY;
}
[cocos2dx笔记005]一个字符串管理配置类的更多相关文章
- [cocos2dx笔记013]一个使用CCRenderTexture创建动态纹理显示数字的类
用CCLabelTTF显示的数字不好看.于是就想到用图片来代理.眼下网上的实现都是把每一个数字做一个CCSprite组合的方式. 可是我想.动态生成纹理的方式.没有就仅仅好自己手动写一个. 头文件 # ...
- struts2学习笔记——第一个struts2应用配置
说实在的,随着Java学习的不断深入,特别是Java web框架部分,调bug让人很心累,但是每征服一个bug,内心的成就感也是难以言说的.第一个struts2应用的配置,我昨天折腾了快2个小时,最后 ...
- spring框架中的一个字符串的工具类
stringutils.hasText("字符串") 如果字符串里面的值为null, "", " ",那么返回值为false:否则为tr ...
- 开发笔记-记一个基础logback配置
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true&q ...
- spring 配置 Java配置类装配bean
https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...
- C#简单配置类及数据绑定
目录 简介 配置基类 派生配置类 数据绑定 Winform中的数据绑定 WPF下的数据绑定 附件 简介 本文实现一个简单的配置类,原理比较简单,适用于一些小型项目.主要实现以下功能: 保存配置到jso ...
- [cocos2dx笔记012]一定简易的UI配置类
使用cocostudio能够装载编辑好的UI,可是过于复杂.特别是在加截UI后,发现触屏事件有些问题. 假设直接使用程序写死载入UI又过于麻烦.花点时间,添加了一个基于ini的UI配置类,眼下仅仅实现 ...
- 【cocos2d-x 3.x 学习笔记】对象内存管理
内存管理 内存管理一直是一个不易处理的问题.开发人员必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完成后有效地释放内存,即管理对象的生命周 ...
- cocos2d-x lua 实现单例(管理类)
cocos2d-x lua 实现单例(管理类) version: cocos2d-x 3.6 示例代码 local DogManager = class("DogManager") ...
随机推荐
- 限制RICHTEXTBOX的输入的范围
附件: http://files.cnblogs.com/xe2011/WindowsFormsApplication_LimitRichTextBoxInput.rar using ...
- eclipse导入web项目各种错误
1.JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bu ...
- [转]自定义Drawable实现灵动的红鲤鱼动画(下篇)
小鱼儿 上篇文章自定义Drawable实现灵动的红鲤鱼动画(上篇)我们绘制了可以摆动身体的小鱼,本篇就分享一下如何让小鱼游到手指点击的位置.用到的主要技术如下: 1).三阶贝塞尔曲线 2).Pat ...
- HDOJ 4686 Arc of Dream 矩阵高速幂
矩阵高速幂: 依据关系够建矩阵 , 高速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/ ...
- 深入理解 Linux 内存管理
1. 内存地址 以Intel的中央处理器为例,Linux 32位的系统中.物理内存的基本单位是字节(Byte),1个字节有8个二进制位. 每一个内存地址指向一个字节,内存地址加1后得到下一个字节的地址 ...
- 从官方的BZR源安装avant-window-navigator
资料来自: http://blog.163.com/azhai@126/blog/static/111056312008315842433/http://www.ibentu.org/2007/09/ ...
- 21、java中和日期相关的类
一.Data及其常用API 1.简介 Java中的时间使用标准类库的java.util.Date,其表示特定的瞬间,精确到毫秒.是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时 ...
- Eureka集群试验的一点总结
先简单描述一下试验: 试验在一台机器上进行,假设有host文件中配置了以下内容 127.0.0.1 left 127.0.0.1 center 127.0.0.1 right 试验中搭建三个注册中心实 ...
- MySQL Desc指令相关
MySQL Desc指令相关 2011-08-09 11:25:50| 分类: my基本命令 |举报 |字号 订阅 1.desc tablename; 例如 :mysql> desc jo ...
- Linux下TCP最大连接数受限问题
一. 文件数限制修改1.用户级别查看Linux系统用户最大打开文件限制:# ulimit -n1024 (1) vi /etc/security/limits.confmysql soft nofil ...