您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x Label不同文字不同颜色

2016-09-04 14:18 1281 查看
前一段时间在cocos2d-x(3.7)项目中遇到一个需求要求实现Label中某些文字的高亮,也就是在一个Label中可以让文字有不同的颜色。看到这个需求我先是在网上找了很久都没有看到有用的信息,后来我就自己改造源码。
Label的原理基本是解析输入的字符串,然后根据字库信息解析字符串为每个字符生成一个对应的LetterInfo,最后根据LetterInfo信息将每个字符初始化一个Sprite(_reusedLetter)中,同时讲这个sprite绑定到_batchNodes(详细请参考Label::updateQuads)。
我改造Label源码的原理是在LetterInfo中添加了一个Color4B color记录每个字符的颜色,在Label中增加了一个颜色表和当前颜色。
struct LetterInfo
{
char16_t utf16Char;
bool valid;
float positionX;
float positionY;
int atlasIndex;
int lineIndex;
Color4B color;//字符颜色
bool bLockColor;//颜色锁,防止被setColor改变
};`


Label中添加`

public:

Color4B _curColor;//当前颜色

bool _bLockColor;//是否锁定

static std::vector colorList;//颜色表,size不要超过10

public:

static void setColorList(std::vector list);

static void addColor(Color3B color);

static std::vector getColorList();

static void clearColorList();

Label源码主要改动函数alignText,multilineTextWrapByWord,multilineTextWrapByChar和updateColor,详见我上传的Label源码资源(http://download.csdn.net/detail/xiaoshu_520/9621329

测试代码先设置Label颜色表

Label::addColor(Color3B(255,0,0));//红

Label::addColor(Color3B(255,255,128));//黄色

Label* lable1 = Label::create();

lable1->setString(“Test [c0]Label [/]Color”);

[c0]表示从这才开始后面的字符都是红色,直到[/]或者文本结束。

(颜色表中红色索引是0,黄色索引是1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: