cocos2D(四)---- CCSprite,cocos2dccsprite
在介紹CCSprite之前,先要理解遊戲開發中的一個核心概念:精靈。精靈也稱為遊戲對象,它可以用來表示遊戲中的任何物體,比如敵人、子彈、甚至是一個背景圖片、一段文字。CCSprite可以說是在cocos2d中最常用的一個類,可以稱之為"精靈類",它能夠以圖片的形式將精靈顯示到螢幕上。
建立精靈
在談怎麼建立一個精靈之前,先瞭解下遊戲開發中另一個核心概念:紋理。紋理其實就是用來描述物體表面細節的圖形,也稱為紋理貼圖,把紋理按照特定的方式映射到物體表面上的時候能使物體看上去更加真實。我們將紋理映射到螢幕上即可顯示對應的圖形。
1.建立精靈最簡單的方式就是給精靈指定一張圖片檔案,cocos2d會利用這張圖片產生紋理對象(CCTexture2D)並載入到紋理緩衝庫中(CCTextureCache),最終由精靈來控制紋理顯示在螢幕中的位置。
[java] view plaincopy
- // 添加精靈到圖層中
- - (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;
- }
為了保證能夠正常讀取圖片資源,要把你的圖片檔案放在Resource檔案夾中
運行效果:
其他常用設定
1> 設定精靈的不透明度
[java] view plaincopy
- // 大概為半透明
- sprite.opacity = 125;
opacity的取值範圍是0-255,0代表完全透明,255代表完全不透明
2> 給精靈著色
[java] view plaincopy
- // 紅色
- sprite.color = ccc3(255, 0, 0);
3> 水平鏡像
[java] view plaincopy
- sprite.flipX = YES;
4> 垂直鏡像
[java] view plaincopy
- sprite.flipY = YES;
如果flipX和flipY一起使用
[java] view plaincopy
- sprite.flipX = YES;
- sprite.flipY = YES;
2.可以指定一個範圍只載入圖片的某個矩形地區
這張圖片的原大小是100x100的
[java] view plaincopy
- CCSprite *sprite = [CCSprite spriteWithFile:@"lufy.png" rect:CGRectMake(0, 0, 50, 50)];
只載入了圖片左上方50x50的地區
3.可以直接傳入一個紋理對象(CCTexture2D)
[java] view plaincopy
- // 建立紋理對象
- CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:@"lufy.png"];
-
- // 傳入紋理對象,產生精靈
- CCSprite *sprite = [CCSprite spriteWithTexture:texture];
CCTextureCache是專門用來緩衝CCTexture2D對象的,它內部有個NSMutableDictionary *textures_字典,key是圖片名稱,vale是CCTexture2D對象。當調用它的addImage:方法添加圖片時,會先根據圖片名尋找字典中是否存在對應的CCTexture2D對象,如果有就直接返回;如果沒有,就會根據圖片名稱去載入CCTexture2D對象,載入完畢後將CCTexture2D對象放入字典中。
或者指定一個範圍只載入圖片的某個矩形地區
[java] view plaincopy
- 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 |
雖然這些裝置的像素解析度不同,但幸運的是,cocos2d的座標系統跟UIKit一樣與像素無關,它使用的是點座標系,而不是像素座標系,即以點為單位,不是以像素為單位。在Retina顯示螢幕的裝置上,1點是2像素;在非Retina顯示螢幕的裝置上,1點就是1像素。因此通過點來表示位置,座標在兩種裝置上是相同的。
如果遊戲運行在具有Retina顯示螢幕的裝置上,cocos2d會先嘗試載入帶有-hd尾碼的圖片。比如你在具有Retina顯示螢幕的裝置上載入ball.png,它會首先嘗試載入ball-hd.png,如果該檔案不存在或者非Retina顯示螢幕,將載入標準解析度(SD)圖片ball.png。因此為了更好地支援Retina顯示屏,一般會使用HD解析度建立所有圖片,然後把寬高都縮小50%,另存新檔SD解析度圖片。
不過,要想cocos2d會自動載入HD圖片,還需要開啟對Retina顯示螢幕的支援
[java] view plaincopy
- [[CCDirector sharedDirector] enableRetinaDisplay:YES];
CCLabelTTF
CCLabelTTF繼承自CCSprite,可以用來顯示文本
[java] view plaincopy
- 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屬性設定文字顏色
[java] view plaincopy
- // 紅色
- label.color = ccc3(255, 0, 0);
原文地址:http://blog.csdn.net/q199109106q/article/details/8603163感謝作者~!
cocos2d裡面CCSprite的opacity屬性有什作用?
是透明度的意思,值越大sprite的顏色就越談.
cocos2d建立CCSprite
可以這麼寫的。
-(id)init
{
if(self = [super init])
{
CCSprite* sprite =[CCSprite spriteWithFile:@"Icon.png"];
[self addChild:sprite];
}
return self;
}