2010-02-09 55 views
1

我對如何使用AtlasLabel存在一些困惑。看起來標籤比LabelAtlas消耗了很多內存?標籤和LabelAtlas比較? LabelAtlas很難使用

如我創建100行文字。它們中的每一個都是由Label創建的,那麼它會消耗比由LabelAtlas創建的100行文本更多的內存嗎?

Label *label1 = [[Label alloc] initWithString:@"text1" dimensions:CGSizeMake(0, 0) alignment:UITextAlignmentLeft fontName:@"Arial" fontSize:22]; 
..... 
..... 
Label *label100 = [[Label alloc] initWithString:@"text100" dimensions:CGSizeMake(0, 0) alignment:UITextAlignmentLeft fontName:@"Arial" fontSize:22]; 

他們將是相同的與

LabelAtlas *label1 = [LabelAtlas labelAtlasWithString:@"text1" charMapFile:@"abc_22c.png" itemWidth:34 itemHeight:40 startCharMap:' ']; 
........ 
....... 
LabelAtlas *label100 = [LabelAtlas labelAtlasWithString:@"text100" charMapFile:@"abc_22c.png" itemWidth:34 itemHeight:40 startCharMap:' ']; 

我認爲LabelAtlas比標籤更便宜,因爲它使用只是一個圖像。標籤每次創建時都會創建一個圖像。

我想將所有文本從標籤轉換爲labelAtlas。但我仍然不太瞭解如何深入使用LabelAtlas。我幾乎不顯示我想要的字符串。我讀了很多例子。這似乎很簡單,但當我嘗試....它不給我我所期望的。你可以告訴我一些使用LabelAtlas而不是Label來顯示長文本的例子。我之前使用過LabelAtlas作爲點數計數器。但現在顯示一個長字符串非常困難。在此先感謝

+4

我希望你沒有100行代碼來創建你的100個標籤? – Vladimir 2010-02-09 09:59:07

回答

2

CCLabel和CCLabelAtlas之間的主要區別在於,地圖集版本(與所有其他地圖集類一樣)使用一個大紋理,並預渲染所有字母以繪製字符串。這意味着繪圖速度要快得多,因爲如果繪製100個標籤,圖形處理器無需讀取100個紋理,只需在內存中保留一個紋理。但是這也意味着所有的字母都是固定的大小。如果您想要解決固定大小的限制,請使用CCBitmapFontAtlas。

而且,是的,CCLabel爲每個標籤創建一個紋理,而CCLabelAtlas使用提供的紋理(包含所有字符)實時渲染文本,因此使用CCLabelAtlas可降低內存消耗。

一般來說,儘量使用* Atlas版本的類。您可以先使用非地圖集版本,然後在您進步了一下並有時間生成地圖集位圖時切換到地圖集版本。如果你剛剛開始,不要太擔心。