cocos2d-x Label不同文字不同顏色
阿新 • • 發佈:2019-02-15
前一段時間在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)