天天看點

cocos2d-x 2.2.3 CCLabelBMFont CCLabelAtals簡單分析

CCLabelBMFont和CCLabelAtals都是用于顯示自定義字型的,這兩者的主要差別在于CCLabelBMFont可以對單個字型做特效。

下面簡單分析下2個的實作,隻是粗略看了下,是以可能還有錯誤,等有時間再仔細看一遍。

CCLabelAtals

主要亮點在void CCLabelAtlas::updateAtlasValues()裡,實作方法主要是對儲存的字元串裡的每一個字元處理,擷取對應的texture的範圍,然後設定每一個渲染的quad,然後一次更新渲染。具體原來涉及到opengl相關的一些東西。主要是texture和quad兩部分内容。

另外需要關注的是void CCLabelAtlas::setString(const char *label),在這裡做根據字元串長度配置設定quads數量的操作,然後調用updateAtlasValues進行更新。

CCLabelBMFont

主要亮點在void CCLabelBMFont::setString(unsigned short *newString, bool needUpdateLabel),在這裡先處理字元串,然後創造字元,最後更新。

創造字元在void CCLabelBMFont::createFontChars(),在這裡擷取字元串長度,然後對每個字元建立對應的是sprite。

更新在void CCLabelBMFont::updateLabel(),先做了判斷是否需要換行之類的操作,可以看出應該是支援自動換行的,然後處理了對齊操作。

總結

2種方式各有優點,記住一個差別即可:

CCLabelBMFont可以對單個字型做特效,CCLabelAtals不能。