2010-02-09 7 views
1

AtlasLabel을 사용하는 방법에 대해 혼란스러워합니다. Label은 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이 라벨보다 저렴 가정

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

와 동일합니다. 레이블은 이미지를 만들 때마다 이미지를 만듭니다.

모든 텍스트를 label에서 labelAtlas로 변환하고 싶습니다. 그러나 여전히 나는 LabelAtlas를 깊이 사용하는 방법을 이해하지 못합니다. 내가 원하는 문자열을 거의 표시하지 않습니다. 나는 많은 예를 읽었다. 그것은 간단하지만 내가 시도했을 때 .... 그것은 내가 기대하는 것을주지 않습니다. 레이블 대신 LabelAtlas를 사용하여 긴 텍스트를 표시하는 몇 가지 예를 보여 줄 수 있습니까? 내 포인트 카운터 전에 LabelAtlas를 사용했습니다. 그러나 이제는 긴 문자열을 표시하는 것이 매우 어렵습니다. 감사합니다 사전에

+4

100 개의 라벨을 만드는 데 100 줄의 코드가 필요하지 않으셨습니까? – Vladimir

답변

2

CCLabel과 CCLabelAtlas의 주요 차이점은 아틀라스 버전 (다른 모든 아틀라스 클래스와 마찬가지로)은 문자를 그리기 위해 사전 렌더링 된 모든 문자로 하나의 큰 텍스처를 사용한다는 것입니다. 즉, 도면을 훨씬 더 빠르게 작성할 수 있습니다. 왜냐하면 100 개의 레이블을 그리면 그래픽 프로세서는 100 개의 텍스처를 읽을 필요가 없기 때문에 하나의 텍스처 만 메모리에 유지하기 때문입니다. 그러나 그것은 또한 모든 글자가 고정 된 크기라는 것을 의미합니다. 고정 된 크기 제한을 해결하려면 CCBitmapFontAtlas를 사용하십시오.

그리고 예, CCLabel은 모든 레이블에 대해 하나의 텍스처를 생성하는 반면 CCLabelAtlas는 제공된 텍스트 (모든 문자 포함)를 사용하여 텍스트를 즉시 렌더링하므로 CCLabelAtlas를 사용하면 메모리 소비가 줄어 듭니다.

일반적으로 항상 * Atlas 버전의 클래스를 사용하십시오. 비 아틀라스 버전을 사용하여 시작한 다음 조금 진행하여 아틀라스 비트 맵을 생성 할 시간이있을 때 아틀라스 버전으로 전환 할 수 있습니다. 처음 시작하는 경우 너무 많이 걱정하지 마십시오.