多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > iOS_31_cocos2d_Label

iOS_31_cocos2d_Label

來源:程序員人生   發布時間:2014-10-08 08:00:00 閱讀次數:3057次
最終效果圖:

cocos2d v3中Label只有2種:
一、CCLabelTTF

注意事項:

CCLabelTTF,可以隨時setString,改變文字,

但是:非常耗性能,

因為,它會為每一個新的string,創建一個新的紋理,進行渲染,

因此,不能頻繁地改變文字的內容;

只有顯示固定的文字時,才建議使用CCLabelTTF

二、CCLabelBMFont

使用注意事項:

BMFont是專門為了頻繁更換label內容而生,

因為,每一個字符如ab1都是一個sprite,

都對應著一個圖片/紋理,

因此會以占用更多的內存為代價,

從而提高了渲染的效率(因為一個sprite對應的紋理只需渲染一次)

另外一個好處是:

由于每一個字符都是一個精靈,所以可以runAction

這里面用到的fnt可以使用Glyph Designer軟件】生成

BMFont不能設置大小size,但是可以通過設置scale縮放

并且,BMFont不能設置高度,僅能設置寬度

// // LabelScene.m // 31_cocos2D入門 // // Created by beyond on 14-9-26. // Copyright (c) 2014年 com.beyond. All rights reserved. // 演示3種Label的場景 #import "LabelScene.h" @interface LabelScene() { CCLabelTTF *_labelTTF; CCLabelBMFont *_bmFont; // CCLabelAtlas *_atlas; } @end @implementation LabelScene #pragma mark - 覆蓋父類方法 -(id)init { if (self=[super init]) { // 1、場景Node 允許交互 self.userInteractionEnabled = YES; } return self; } // 直接覆寫,即:不用創建一個sprite In Center - (void)addSpriteInCenter{} // 實現父類的方法,添加一個按鈕到屏幕上 - (void)addShowBtns { // 1.使用CCLabelTTF [self addBtn:@"【CCLabelTTF】" position:ccp(0, 0) target:self sel:@selector(labelTTFClicked)]; // 2.使用CCLabelBMFont [self addBtn:@"【CCLabelBMFont】" position:ccp(0, 0.1) target:self sel:@selector(labelBMFontClicked)]; // 3.讓BMFont的每一個字符精靈,產生Action [self addBtn:@"【BMFont字符精靈動畫】" position:ccp(0, 0.2) target:self sel:@selector(labelBMFont_SpriteActionClicked)]; } // 1.使用CCLabelTTF - (void)labelTTFClicked { _bmFont.string = @""; _bmFont = nil; // CCLabelTTF,可以隨時setString,改變文字,但是:非常 耗性能,因為,它會為每一個新的string,創建一個新的紋理,進行渲染,因此,不能頻繁地改變文字的內容;只有固定的文字才建議使用CCLabelTTF CGSize dimension = self.contentSize; _labelTTF = [CCLabelTTF labelWithString:@"Hello Beyond" fontName:@"Marker Felt" fontSize:67 dimensions:dimension]; _labelTTF.horizontalAlignment = CCTextAlignmentCenter; _labelTTF.verticalAlignment = CCVerticalTextAlignmentCenter; _labelTTF.position = ccp(self.contentSize.width/2,self.contentSize.height/2); // 添加到場景中 [self addChild:_labelTTF]; } // 2.使用CCLabelBMFont - (void)labelBMFontClicked { _labelTTF.string = @""; _labelTTF = nil; // BMFont是專門為了頻繁更換label內容而生,因為,每一個字符如a、b、1等都是一個sprite,都對應著一個圖片/紋理,因此會以占用更多的內存為代價,從而提高了渲染的效率(因為一個sprite對應的紋理只需渲染一次) // 另外一個好處是,由于每一個字符都是一個精靈,所以可以runAction // 這里面的fnt可以使用 【Glyph Designer 】生成 // BMFont不能設置大小size,但是可以通過設置scale縮放 // BMFont不能設置高度,僅能設置寬度 _bmFont = [CCLabelBMFont labelWithString:@"Hello Beyond" fntFile:@"Marion.fnt" width:400 alignment:CCTextAlignmentCenter]; _bmFont.position = ccp(self.contentSize.width/2,self.contentSize.height/2); // _bmFont.scale = 1; // 添加到場景中 [self addChild:_bmFont]; } // 3.演示labelBMFont的每一個字符精靈的動畫 - (void)labelBMFont_SpriteActionClicked { _bmFont.string = @""; _bmFont = nil; _labelTTF.string = @""; _labelTTF = nil; // 1.先創建一個BMFont CCLabelBMFont *bmfont = [CCLabelBMFont labelWithString:@"Hello Beyond" fntFile:@"Marion.fnt" width:350 alignment:CCTextAlignmentCenter]; bmfont.position = ccp(self.contentSize.width/2,self.contentSize.height/2); // _bmFont.scale = 1; // 添加到場景中 [self addChild:bmfont]; // BMFont 另外一個好處是,由于每一個字符都是一個精靈,所以可以runAction // 2. 取出 BMFont 第0個字符精靈 CCSprite *firstCharSprite = [bmfont.children objectAtIndex:0]; CCActionJumpBy *jump = [CCActionJumpBy actionWithDuration:0.5 position:CGPointZero height:40 jumps:2]; // 延時 CCActionDelay *delay = [CCActionDelay actionWithDuration:1]; // 先跳后,延時1秒 CCActionSequence *sequence = [CCActionSequence actionOne:jump two:delay]; // 讓第0個字符精靈永遠執行動作 [firstCharSprite runAction:[CCActionRepeatForever actionWithAction:sequence]]; // 3.取出 BMFont 第6個字符精靈 CCSprite *sixCharSprite = [bmfont.children objectAtIndex:6]; // 讓第6個字符精靈永遠執行動作 [sixCharSprite runAction:[CCActionRepeatForever actionWithAction:[CCActionRotateBy actionWithDuration:3 angle:360]]]; } #pragma mark - 時鐘方法 - (void)update:(CCTime)delta { if (_labelTTF != nil) { [self showLabelTTF]; } else if(_bmFont != nil){ [self showBMFont]; } } #pragma mark - 自定義方法 - (void)showLabelTTF { // 隨機數字+字母 _labelTTF.string = [NSString stringWithFormat:@"%f %c", CCRANDOM_MINUS1_1() * 1000, 'a' + (int)(CCRANDOM_0_1() * 26)]; } - (void)showBMFont { // 隨機數字+字母 _bmFont.string = [NSString stringWithFormat:@"%f %c", CCRANDOM_MINUS1_1() * 1000, 'a' + (int)(CCRANDOM_0_1() * 26)]; } /* // 雖然Atalas已不再使用,但是其特點還是介紹一下 // Atalas 使用的是plist文件,同時,它要求圖片里面每一個char要有相同的寬度和高度,并且按ascii順序排列 ,因為Atalas就是根據ascii值到Plist中去截取對應位置的對應size的圖片,作為文字使用 // Atalas適合于 像高速顯示少數的幾個數字,如左下角的幀率,這樣的文字(字符) */ @end



CCLabelBMFont需要用到的軟件:

Glyph Designer (類似的工具還有Hiero)

glyph n.象形文字,象形符號


軟件默認打開界面:
使用了抗鋸齒、徑向填充(Gradient Fill Glyph)

實心填充(solid fill)
一般情況下:
會先用小字號(如64)生成一個非視網膜屏幕下的圖片,如a.png
再用大字號(如128)生成視網膜屏幕下的圖片,如a-hd.png

視網膜屏幕下用的a-hd.png,字號大小是上面的2倍,為128


點擊【Export】,生成cocos2d使用的fnt文件

此時,在Documents路徑下會生成2個文件
.fnt和.png
其中.fnt就是對圖片的描述文件,描述每一個字符char在圖片中的位置等信息

用文件編輯器打開.fnt,可以看到該文件描述的File是"Marion.png"














在cocos2d v3中,Atlas已經不再使用,這仍簡單介紹一下

Atlas 使用的是plist文件,

它要求圖片里面每一個char要有相同的寬度和高度,并且按ascii順序排列 ,

因為Atlas就是根據ascii值到Plist中去截取對應位置的對應size的圖片,作為文字使用

Atlas適合于 像高速地動態地顯示少數的幾個數字,如左下角的幀率(只有0~9),這樣的文字(字符)










生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 一区一区三区产品乱码 | 中文字幕免费在线看 | www.久久av.com | 男人午夜视频在线观看 | 国产成人久久精品麻豆二区 | 中文字幕激情视频 | 精品欧美一区二区三区在线 | 欧美视频在线观看爱爱 | 男女性高清爱潮视频免费观看 | 国产成人亚洲综合91精品555 | 成人国产一区二区三区精品 | 手机看片久久高清国产日韩 | 一级a毛片免费观看久久精品 | 国产一区二区福利久久 | h免费观看 | 精产国品一区 | 国产精品免费一区二区三区 | 国产激情一区二区三区在线观看 | 亚洲欧美一区二区三区蜜芽 | 免费看毛片网站 | 日本一区二区三区不卡视频中文字幕 | 国产亚洲一区在线 | 国产免费一区二区三区在线观看 | 男女xx00| 国产高清精品91在线 | 亚洲专区在线视频 | 国产精品区一区二区免费 | 国产美女视频一区二区二三区 | 国产九九免费视频网站 | 国产精品乱码免费一区二区 | 亚洲激情欧美激情 | 最近高清中文在线字幕在线观看 | 欧美日韩第一页 | 亚洲特级aaaaaa毛片 | 一级做a爱片久久毛片 | 周妍希国产福利在线观看 | 亚洲免费视频在线观看 | 一个色亚洲 | 99久久免费国内精品 | japanese年轻护士出水 | 桃乃木香奈中文字幕 |