views:

420

answers:

1

Hi everyone

I have some confusion about how to use AtlasLabel. It seems Label consume a lot memory than LabelAtlas?

Such as if I create 100 line of text. Each of them is created by Label, then will it consume more memory than 100 line of text created by 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];

will they be the same with

 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:' '];

I assume LabelAtlas is less expensive than Label since it uses just one image. Label creates likely an image each time it created.

I would like to convert all the text from label to labelAtlas. But I still don;t really understand how to use LabelAtlas deeply. I hardly display the string I want. I read number of examples. It seems simple but when I tried....It does not give me what I expect. Could you show me some example for displaying a long text using LabelAtlas instead of Label. I used LabelAtlas before for my point counter. But it is so hard now to display a long string. Thanks in Advance

A: 

The main difference between CCLabel and CCLabelAtlas is that the atlas version (like all the other atlas classes) uses one big texture with all the letters pre-rendered to draw a string. This means that the drawing is much faster, because if you draw 100 labels, the graphics processor doesn't have to read in 100 textures but just keep one texture in memory. But it also means that all the letters will be of a fixed size. If you want to get around the fixed-size limitation, use CCBitmapFontAtlas.

And, yes, CCLabel creates one texture for every label, whereas CCLabelAtlas renders the text on the fly, using the provided texture (containing all the characters), so using CCLabelAtlas results in lower memory consumption.

In general, try to always use the *Atlas versions of classes. You can start by using the non-atlas versions and then switch to the atlas version when you've progressed a bit and had time to generate the atlas bitmaps. Don't worry too much about it if you're just starting out.

Felixyz