今天想了解下coco2d中的富文本实现,了解到
这里的UIRichText是实现富文本的类。所以想看下实现内容,如果直接去读代码的话有点乱。
现在打开cocos2d的API文档:
http://www.cocos2d-x.org/docs/api-ref/cplusplus/V2.2.6/d6/d3c/_u_i_rich_text_8h.html
找到UIRichText.h,如下图:
文档中已经把UIRichText里的内容都给归类列好了,有哪些类,有哪些枚举,命名空间这些信息一目了然。
下面在来看.h文件,发现里面有一对
NS_CC_BEGIN
NS_CC_END
首先他们是一对宏定义,用来告诉编译器其中定义的内容是coco2d命名空间下的,因为coco2d的所有核心代码都在cocos2d命名空间下。
另外NS_CC_BEGIN和NS_CC_END中间又包了一层:
namespace ui {
}这也是一个命名空间的定义,代表UIRichText的命名空间在cocos2d里的ui里,这点跟上图中保持一致。
下面再来看:
#ifndef __UIRICHTEXT_H__
#define __UIRICHTEXT_H__
...(程序段内容)
#endif /* defined(__UIRichText__) */
他们是三种预处理功能(宏定义、文件包含、条件编译)中的条件编译。ifndef是if not define的缩写,判断__UIRICHTEXT_H__是否被宏定义过,如果没有#define __UIRICHTEXT_H__定义并编译__UIRICHTEXT_H__
endif下面执行如果定义过了执行的程序段,这里没有,所以下面就没有内容了。
#ifndef 的最主要目的是防止头文件的重复包含和编译。
CC_EX_DLL 理解不了啊???????????????????
下面记录下理解的语句:
if(((pos=str.find("<rayimg>"))!=str.npos)) -- str中存在"<rayimg>"这个字符,且位置在pos所代表的位置。
string 类提供了 6 种查找函数,每种函数以不同形式的 find 命名。 这些操作全都返回 string::size_type 类型的值,以下标形式标记查找匹配所发生的位置; 或者返回一个名为 string::npos 的特殊值,说明查找没有匹配。string 类将 npos 定义为保证大于任何有效下标的值。 所以 当 str.find("哦")==string::npos时则说明字符串str中不存在“哦”这个字符, 反之,str.find("哦")!=string::npos则说明字符串str中存在“哦”这个字符