2010-02-09 4 views
1

У меня есть некоторая путаница в том, как использовать AtlasLabel. Кажется, Label потребляет много памяти, чем LabelAtlas?Сравнение этикеток и этикеток? LabelAtlas сложно использовать

Например, если я создаю 100 строк текста. Каждый из них создается Label, тогда он будет потреблять больше памяти, чем 100 строк текста, созданных LabelAtlas?

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 для моего счетчика. Но теперь так сложно отобразить длинную строку. Спасибо в Advance

+4

Надеюсь, у вас нет 100 строк кода для создания ваших 100 ярлыков? – Vladimir

ответ

2

Основное отличие между CCLabel и CCLabelAtlas заключается в том, что версия атласа (как и все другие классы атласа) использует одну большую текстуру со всеми буквами, предварительно обработанными для рисования строки. Это означает, что рисунок намного быстрее, потому что, если вы нарисуете 100 меток, графический процессор не должен читать 100 текстур, а просто сохранить одну текстуру в памяти. Но это также означает, что все буквы будут иметь фиксированный размер. Если вы хотите обойти ограничение по фиксированному размеру, используйте CCBitmapFontAtlas.

И, да, CCLabel создает одну текстуру для каждой метки, тогда как CCLabelAtlas отображает текст «на лету», используя предоставленную текстуру (содержащую все символы), поэтому использование CCLabelAtlas приводит к снижению потребления памяти.

В общем, старайтесь всегда использовать * классы атласа классов. Вы можете начать с использования версий без атласа, а затем перейти к версии атласа, когда вы немного продвинулись и успели создать растровые изображения атласа. Не беспокойтесь об этом, если вы только начинаете.

Смежные вопросы