Сравнение Label и LabelAtlas? LabelAtlas сложно использовать - PullRequest
1 голос
/ 09 февраля 2010

У меня путаница в том, как использовать AtlasLabel. Кажется, Label потребляет больше памяти, чем 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 дешевле, чем Label, поскольку он использует только одно изображение. Скорее всего, ярлык создает изображение при каждом его создании.

Я хотел бы преобразовать весь текст из метки в метку Атласа. Но я все еще не понимаю, как глубоко использовать LabelAtlas. Я едва отображаю строку, которую хочу. Я читаю ряд примеров. Это кажется простым, но когда я пытался .... Это не дает мне то, что я ожидаю. Не могли бы вы показать мне пример для отображения длинного текста с использованием LabelAtlas вместо Label. Я использовал LabelAtlas раньше для моего счетчика очков. Но сейчас так сложно отобразить длинную строку. Заранее спасибо

1 Ответ

2 голосов
/ 19 февраля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...