在介紹CCSprite之前,先要理解遊戲開發中的一個核心概念:精靈。精靈也稱爲遊戲對象,它可以用來表示遊戲中的任何物體,比如敵人、子彈、甚至是一個背景圖片、一段文字。CCSprite可以說是在cocos2d中最常用的一個類,可以稱之爲"精靈類",它能夠以圖片的形式將精靈顯示到屏幕上。
創建精靈
在談怎麼創建一個精靈之前,先了解下游戲開發中另一個核心概念:紋理。紋理其實就是用來描述物體表面細節的圖形,也稱爲紋理貼圖,把紋理按照特定的方式映射到物體表面上的時候能使物體看上去更加真實。我們將紋理映射到屏幕上即可顯示對應的圖形。
1.創建精靈最簡單的方式就是給精靈指定一張圖片文件,cocos2d會利用這張圖片生成紋理對象(CCTexture2D)並加載到紋理緩存庫中(CCTextureCache),最終由精靈來控制紋理顯示在屏幕中的位置。
- // 添加精靈到圖層中
- - (id)init {
- if (self = [super init]) {
- CCSprite *sprite = [CCSprite spriteWithFile:@"lufy.png"];
- CGSize winSize = [CCDirector sharedDirector].winSize;
- sprite.position = ccp(winSize.width * 0.5f , winSize.height * 0.5f);
- [self addChild:sprite];
- }
- return self;
- }
運行效果:
其他常用設置
1> 設置精靈的不透明度
- // 大概爲半透明
- sprite.opacity = 125;
opacity的取值範圍是0-255,0代表完全透明,255代表完全不透明
2> 給精靈着色
- // 紅色
- sprite.color = ccc3(255, 0, 0);
3> 水平鏡像
- sprite.flipX = YES;
4> 垂直鏡像
- sprite.flipY = YES;
如果flipX和flipY一起使用
- sprite.flipX = YES;
- sprite.flipY = YES;
2.可以指定一個範圍只加載圖片的某個矩形區域
這張圖片的原大小是100x100的
- CCSprite *sprite = [CCSprite spriteWithFile:@"lufy.png" rect:CGRectMake(0, 0, 50, 50)];
只加載了圖片左上角50x50的區域
3.可以直接傳入一個紋理對象(CCTexture2D)
- // 創建紋理對象
- CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:@"lufy.png"];
- // 傳入紋理對象,生成精靈
- CCSprite *sprite = [CCSprite spriteWithTexture:texture];
CCTextureCache是專門用來緩存CCTexture2D對象的,它內部有個NSMutableDictionary *textures_字典,key是圖片名稱,vale是CCTexture2D對象。當調用它的addImage:方法添加圖片時,會先根據圖片名查找字典中是否存在對應的CCTexture2D對象,如果有就直接返回;如果沒有,就會根據圖片名稱去加載CCTexture2D對象,加載完畢後將CCTexture2D對象放入字典中。
或者指定一個範圍只加載圖片的某個矩形區域
- CCSprite *sprite = [CCSprite spriteWithTexture:texture rect:CGRectMake(0, 0, 50, 50)];
紋理的大小
目前位置,iOS設備只支持尺寸爲"2的n次冪"的紋理,因此每張紋理的寬和高都只可能爲:2、4、8、16、32、64、128、256、512、1024和2048像素。也就是說紋理的寬高只能是上述數值的組合,比如2x4,32x32,512x64等。
我們在製作紋理圖片的時候,最好圖片的尺寸都符合上述要求,不然壞處多多。
比如,有一張260x260像素的32位色圖,它本應該在內存中大概佔270KB(260 x 260 x 32 / 8 = 270400B),但受紋理尺寸的限制,紋理的尺寸必須是2的n次冪,系統會自動生成一張最接近原圖尺寸的(但不能偏小,要能包含原圖像)、寬高都爲2的n次冪的紋理,於是系統將生成一張512x512像素的紋理,所以最終會佔用1MB的內存(512 x 512 x 32 / 8 = 1048576B),實際佔用的內存竟然是所需內存的4倍。解決辦法就是將這張260x260像素的圖像改爲256x256像素,系統也將生成256x256像素的紋理。
HD和SD圖像
iOS的像素分別率隨設備的硬件而變化,iPhone第一次引入了高分辨率的視網膜屏幕(Retina顯示屏幕),像素分辨率爲960x640,剛好是前一代iPod和iPhone像素分辨率(480x320)的兩倍。一般會將Retina顯示屏幕使用的圖像稱爲高分辨率(HD)圖像,非Retina顯示屏幕使用的圖像稱爲標準分辨率(SD)圖像。
下面來看看各代iOS設備的規格參數
設備 | 最大紋理尺寸 | 像素分辨率 | 座標系 |
iPhone 2G\3G\3GS、iPod Touch |
1024x1024 |
480x320 | 480x320 |
iPhone4、iPhone4s | 2048x2048 |
960x640 | 480x320 |
iPad、iPad2 | 2048x2048 | 1024x768 | 1024x768 |
如果遊戲運行在具有Retina顯示屏幕的設備上,cocos2d會先嚐試加載帶有-hd後綴的圖片。比如你在具有Retina顯示屏幕的設備上加載ball.png,它會首先嚐試加載ball-hd.png,如果該文件不存在或者非Retina顯示屏幕,將加載標準分辨率(SD)圖片ball.png。因此爲了更好地支持Retina顯示屏,一般會使用HD分辨率創建所有圖片,然後把寬高都縮小50%,另存爲SD分辨率圖片。
不過,要想cocos2d會自動加載HD圖片,還需要開啓對Retina顯示屏幕的支持
- [[CCDirector sharedDirector] enableRetinaDisplay:YES];
CCLabelTTF
CCLabelTTF繼承自CCSprite,可以用來顯示文本
- CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World" fontName:@"Courier New" fontSize:20];
- label.position = ccp(winSize.width * 0.5f , winSize.height * 0.5f);
- [self addChild:label];
可以通過color屬性設置文字顏色
- // 紅色
- label.color = ccc3(255, 0, 0);