[?李華明Himi?](http://www.himigame.com/about-himi)原創,轉載務必在明顯處注明:
轉載自[【黑米GameDev街區】](http://www.himigame.com/)?原文鏈接:?[http://www.himigame.com/iphone-cocos2d/516.html](http://www.himigame.com/iphone-cocos2d/516.html "【iOS-Cocos2d游戲開發之二十】精靈的基礎知識點總匯(位圖操作/貼圖更換/重排z軸等)以及利用CCSprite與CCLayerColor制作簡單遮蓋層!")
[](http://blog.csdn.net/xiaominghimi/article/details/6955680)
最近寫了不少Cocos2d的博文了,那么由于Himi介紹的一般都是比較容易出錯的問題或者比較受到關注的知識點,所以不少童鞋要求寫個基礎篇,那么這里Himi就舉例最常用的精靈CCSprite來詳細的介紹一些吧; 考慮到網上對于Cocos2d-iphone的中文教程已有很多,所以這里Himi會拿出一些教程沒有提到的基礎知識點來分享;
首先我們來創建一個精靈:?
~~~
CCSprite* sprite =[CCSprite spriteWithFile:@"Icon.png"];//初始化
[self addChild:sprite]; //添加入層中
~~~
代碼很簡單,傳入一張貼圖名即可,然后添加層中,那么這里Himi說幾點:
1.精靈除了這個創建函數外,還有很多方法,最重要的另一個就是利用打包工具打包出來的幀緩存中加載貼圖并創建;關于打包工具Himi使用的是TP,還有其他一些這里不介紹了,Himi之前的博文也有對應的介紹;
2.精靈默認添加進layer中默認是layer的(0,0)點,即屏幕的左下角;而且精靈的貼圖繪制是以精靈的貼圖中心點進行渲染的,簡單說如果精靈貼圖大小看成單位一,精靈的錨點(anchor)是(0.5,0.5);這個是精靈默認錨點,當然也可以設置錨點,這個錨點的范圍是[0,1];
3.大家如果剛接觸一門新語言、引擎、框架等就要慢慢找到它們的規律,比如在cocos2d中一般創建都是類似的創建方式,而初始化的函數基本都是以類名后的一個單詞作為開頭;比如咱們這個CCSprite類,它的構造函數就是sprite開頭的;
OK,知道如何創建一個精靈了,下面我們來寫一點精靈的常用方法和基本位圖操作吧:
~~~
CCSprite* sprite =[CCSprite spriteWithFile:@"Icon.png"];//初始化
[self addChild:sprite]; //添加入層中
sprite.scale=2;//放大2倍
sprite.rotation=90;//旋轉90度
sprite.opacity=255;//設置透明度為完全不透明(范圍0~255)
sprite.position=ccp(100,100);//設置精靈中心點坐標是x=100,y=100
[sprite setFlipX:YES];//X軸鏡像反轉
[sprite setFlipY:YES];//Y軸鏡像反轉
[sprite setColor:ccc3(255, 0, 0)];//設置顏色為紅色
~~~
關于精靈的動作這些N多文章都寫過了,這里我就不寫了,沒意義,我這里給大家再講解下童鞋們經常糾結的兩個問題:
1.如何重新設置精靈的z軸(覆蓋層)?
對于這個問題,很多童鞋無法找到方法的原因主要是因為大家首先想到的是更改精靈的Z軸值的大小(Z軸值越大離屏幕越近),那么就會錯誤的使用下面這段代碼:
~~~
sprite.zOrder=2;
~~~
這句話是不允許使用的錯誤代碼,因為精靈的zOrder屬性只能可讀不可修改;那么Himi提供大家一個解決方法,那就是利用布局去重新設置你想設置的精靈的z軸值,例如以下代碼:(111.png是我從博客隨便截出來的圖,反正比Icon.png大就可以,這樣童鞋們就能看得清楚了)
~~~
//--z值1的精靈
CCSprite* sprite =[CCSprite spriteWithFile:@"Icon.png"];
[self addChild:sprite z:1]; //添加入層中
sprite.position=ccp(300,200);//設置精靈中心點坐標是x=100,y=100
//--z值2的精靈
CCSprite* sprite2 =[CCSprite spriteWithFile:@"111.png"];
[self addChild:sprite2 z:2];
sprite2.position=ccp(220,120);
~~~
從代碼中可以很清晰看到第二個精靈sprite2的z軸大于第一個精靈sprite的z軸值,那么sprite2肯定是覆蓋sprite上的,運行效果圖如下:

下面我們來利用layer對第一個精靈進行z軸重新設定,代碼如下:
~~~
[self reorderChild:sprite z:10];
~~~
self: ?CCLayer
sprite: ?想要重新設置z軸(覆蓋層)的精靈
z:?想要重新設置z軸(覆蓋層)的精靈的z軸值
OK,那么我們重新設置了第一個精靈的z軸值為10,這時候精靈1比精靈2的z軸大了,1會覆蓋2精靈,運行效果如下圖:

2.如何更換已創建的精靈貼圖?
在上面我介紹了精靈的創建一般有兩種:一種是利用幀緩存,另一種是直接索引貼圖ID進行創建;所以呢更換精靈貼圖也一般分為兩種方法;
首先介紹第一種直接利用新建貼圖進行更換:
實例代碼如下:
~~~
//-----沒有換貼圖前
CCSprite*sprite =[CCSprite spriteWithFile:@"Icon.png"];
sprite.position=ccp(150,150);
[self addChild:sprite];
//-----換貼圖后
CCSprite*sprite2 =[CCSprite spriteWithFile:@"Icon.png"];
sprite2.position=ccp(350,150);
[self addChild:sprite2];
//更換貼圖
CCTexture2D * texture =[[CCTextureCache sharedTextureCache] addImage: @"Default.png"];//新建貼圖
[sprite2 setTexture:texture];
~~~
運行效果如下:

第二種利用幀替換:
~~~
//加載幀緩存,這個testpngs.plist保存了Icon和111兩張圖,-hd表示高清版本iphone4
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"testpngs-hd.plist"];
//-----沒有換貼圖前
CCSprite*sprite =[CCSprite spriteWithSpriteFrameName:@"Icon.png"];
sprite.position=ccp(150,150);
[self addChild:sprite];
//-----換貼圖后
CCSprite*sprite2 =[CCSprite spriteWithSpriteFrameName:@"Icon.png"];
sprite2.position=ccp(350,150);
[self addChild:sprite2];
//更換幀貼圖
//從幀緩存中取出111.png
CCSpriteFrame* frame2 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"111.png"];
[sprite2 setDisplayFrame:frame2];
~~~
運行效果如下:

-------------下面來介紹如何來利用CCSprite精靈或者CCLayerColor簡單實現一個簡單的覆蓋層(遮擋)效果
首先利用CCSprite來實現,代碼如下:
~~~
CCSprite *sprLeft = [CCSprite spriteWithFile:@"Icon.png"];
sprLeft.position=ccp(100,180);
[self addChild:sprLeft];
//----創建一個簡單的覆蓋層
//獲取當前屏幕寬高
CGSize size =[[CCDirector sharedDirector]winSize];
//創建一個精靈(無貼圖)
CCSprite*sprite =[CCSprite node];
//設置精靈貼圖大小(全屏幕寬高)
sprite.textureRect=CGRectMake(0, 0, size.width, size.height);
sprite.position=ccp(size.width*0.5,size.height*0.5);
sprite.opacity=127;//半透明[0~255]
sprite.color=ccc3(0, 0, 0);//設置黑色
[self addChild:sprite];
//----
CCSprite* sprRight = [CCSprite spriteWithFile:@"Icon.png"];
sprRight.position=ccp(300,180);
[self addChild:sprRight];
~~~
這里我創建了兩個精靈一個被覆蓋 一個不被覆蓋 這樣只要讓童鞋們看得更清楚~
下面利用第二種方式實現:
~~~
//----
CCSprite *sprLeft = [CCSprite spriteWithFile:@"Icon.png"];
sprLeft.position=ccp(100,180);
[self addChild:sprLeft];
//----創建一個簡單的覆蓋層
//創建一個精靈(無貼圖)
CCLayerColor *layer =[CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)];
[self addChild:layer];
//----
CCSprite* sprRight = [CCSprite spriteWithFile:@"Icon.png"];
sprRight.position=ccp(300,180);
[self addChild:sprRight];
~~~
第二種方法大家可以看到就兩句話實現,原因這里解釋下:
第一種設置了貼圖大小,layer不需要!因為layer默認全屏;
第一種設置了坐標,layer不需要!因為layer默認屏幕中心點;
第一種設置了透明度和顏色,layer也設置了~在layer創建的時候創建的,在layer創建時傳入的四個參數:
四個參數分別表示RGBA!注意是RGBA!!!!不是ARGB!(因為Himi做過me、Android所以看到設置顏色第一概念就是ARGB。。所以剛接觸這里各種郁悶,總是效果不是如自己想的。。。)
這里補充下:RGBA 顏色的三原色,紅色、綠色、藍色、透明度!
兩種實現方式效果都如下圖所示:

希望童鞋們在初學的時候盡可能的遇到問題按照如下順序去做:首先自己多次嘗試->去看源碼->百度google->最后請教他人
OK,就寫到這里!下篇見~繼續忙了; ? ? ? ? ??
- 前言
- 【Iphone 游戲開發】游戲引擎剖析
- [Object-C語言隨筆之一]Mac os 下搭建iOS開發環境
- [Object-C語言隨筆之二] 《NSLog》常用的打印調試語句與自動排版
- [Object-C語言隨筆之三] 類的創建和實例化以及函數的添加和調用!
- [Object-C語言隨筆之四]創建視圖并繪制簡單圖形
- 【iOS-Cocos2d游戲開發之一】搭建cocos2d游戲引擎環境HelloWorld!
- 【iOS-Cocos2d游戲開發之二】Cocos2D 游戲開發資源貼(教程以及源碼)
- 【iOS-Cocos2d游戲開發之三】CCScene切換的所有特效(28種)以及設置屏幕橫豎屏!
- 【iOS-Cocos2d游戲開發之四】獨自收集Cocos2d提供的字體!共57種(有對照的字體圖)
- 【iOS-Cocos2d游戲開發之五】多觸點與觸屏事件詳解(單一監聽、事件分發)【11月28日更新】
- 【iOS-Cocos2d游戲開發之六】對觸屏事件追加講解,解決無法觸發ccTouchMoved事件[重要!]
- 【iOS-Cocos2d游戲開發之七】在cocos2d中添加/刪除系統組件,并解決View設置透明會影響View中的其他組件的問題!【11月28日更新解決添加組件Cocos2d動畫停止播放的BUG】
- 【iOS-Cocos2d游戲開發之八】開啟高清(960*640)模式問題與解答、圖片適配以及設置iphone橫豎屏
- 【iOS-Cocos2d游戲開發之九】講解CCSpriteBatchNode與TP工具的".pvr.ccz",".plist"共用的終極精靈優化及注意事項!
- 【iOS-Cocos2d游戲開發之十】添加粒子系統特效并解決粒子特效與Layer之間的坐標問題;
- 【iOS-Cocos2d游戲開發之十一】使用Box2d物理系統以及在cocos2d框架添加Box2d物理系統lib包的方法
- 【iOS-Cocos2d游戲開發之十二】淺析使用C++/C/OC進行iOS游戲混編出現“failed with exit”問題與小結;
- 【iOS-Cocos2d游戲開發之十三】CCSprite利用Bezier(貝塞爾)做拋物線動作并讓CCSprite同時播放兩個Action動作!
- 【iOS-Cocos2d游戲開發之十四】音頻/音效/視頻播放(利用Cocos2D-iPhone-Extensions嵌入Cocos2d進行視頻播放!)
- 【iOS-Cocos2d游戲開發之十五】詳解CCProgressTimer 進度條并修改cocos2d源碼實現“理想”游戲進度條!
- 【iOS-Cocos2d游戲開發之十六】添加本地通知(UILocalNotification)以及添加系統組件滾動視圖(UIScrollView)!【2011年11月15日更新】
- 【iOS-Cocos2d游戲開發之十七】靈活使用精靈可視區域(TextureRect)與錨點(anchorPoint),并結合可視區域與錨點制作進度條!
- 【iOS開發必備指南合集】申請企業級IDP、真機調試、游戲接入GameCenter 指南(實現仿官方的成就提示)、游戲接入OpenFeint指南;
- 【iOS-Cocos2d游戲開發之十八】解決滾屏背景/拼接地圖有黑邊(縫隙)/動畫播放出現毛邊以及禁止游戲中自動鎖屏問題!【2011年12月18日補充】
- 【iOS開發必收藏】詳解iOS應用程序內使用IAP/StoreKit付費、沙盒(SandBox)測試、創建測試賬號流程!【2012-12-11日更新獲取"產品付費數量等于0的問題"】
- 【iOS-cocos2d-X 游戲開發之一】在Mac下結合Xcode搭建Cocos2d-X開發環境!
- 【iOS-cocos2d-X 游戲開發之二】【必看篇】總結闡述Cocos2d-X與Cocos2d-iphone區別;
- 【iOS-Cocos2d游戲開發之十九】游戲數據存儲的四種常用方式NSKeyedArchiver/NSUserDefaults/Write寫入/SQLite3
- 【iOS-Cocos2d游戲開發之二十】精靈的基礎知識點總匯(位圖操作/貼圖更換/重排z軸等)以及利用CCSprite與CCLayerColor制作簡單遮蓋層!
- 【iOS-Cocos2d游戲開發之二十一 】自定義精靈類并為你的精靈設置攻擊幀(指定開始幀)以及擴展Cocos2d源碼的CCAnimation簡化動畫創建!
- 【iOS-Cocos2d游戲開發之二十二 】CCSpeed實現CCAnimate動畫進行時設置慢動作以及設置游戲加減速進行(塔防游戲必備)!
- 【iOS-cocos2d-X 游戲開發之三】Mac下配置Android NDK環境并搭建Cocos2d-x環境并Eclipse正常編譯運行Cocos2dX自帶TestsDemo項目!
- 【iOS-cocos2d-X 游戲開發之四】Cocos2dX創建Android NDK新項目并編譯導入Eclipse中正常運行!
- 【iOS-cocos2d-X 游戲開發之五】游戲存儲之Cocos2dX自帶CCUserDefault類詳解;
- 【iOS-cocos2d-X 游戲開發之六】使用Base64算法對Cocos2dX自帶CCUserDefault游戲存儲數據編碼!
- 【iOS-cocos2d-X 游戲開發之七】整合Cocos2dX的Android項目到Xcode項目中,Xcode編寫&編譯代碼,Android導入打包運行即可!
- 【iOS-iap防護】驗證用戶付費收據!拒絕iap Cracker!拒絕iap Free!讓iphone越獄用戶無從下手!【2012年5月2日更新防護iap Free的方法】
- 【COCOS2DX-LUA 腳本開發之一】在Cocos2dX游戲中使用Lua腳本進行游戲開發(基礎篇)并介紹腳本在游戲中詳細用途!
- 【iOS-cocos2d-X 游戲開發之九】Cocos2dx利用CCSAXParser解析xml數據&CCMutableDictionary使用與注意!
- 【iOS-cocos2d-X 游戲開發之十】自定義CCSprite/Layer/CCNode及靜態類模版&自定義類細節說明&Cocos2dx觸屏事件講解
- 【iOS-cocos2d-X 游戲開發之十一】New CCSprite()帶來的錯誤&使用CCUserDefault及pvr.ccz在Cocos2dx中要注意!
- 【iOS-cocos2d-X 游戲開發之十二】自定義Cocos2dx搖桿(增強Joystick),增加搖桿跟隨用戶觸點作為搖桿坐標,讓搖桿不再死板!
- 【iOS-cocos2d-X 游戲開發之十三】詳細講解在Xcode中利用預編譯并通過Jni調用Android的Java層代碼(cocos2dx里訪問調用Android函數)!
- 【iOS-cocos2d-X 游戲開發之十四】Xcode中c++&Object-C混編,詳細介紹如何在cocos2dx中訪問object函數以及Apple Api
- 【iOS-cocos2d-X 游戲開發之十五】Cocos2dx中響應Android的Back(返回)與Menu(小房子)事件&&Cocos2dx自動釋放粒子內存函數!
- 【iOS-cocos2d-X 游戲開發之十六】配置你的Cocos2dx項目編譯后的Android自動使用(-hd)高清圖&設置Android自適應屏幕、縮放比例方法!
- 【Cocoa(mac) Application 開發系列之四】動作編輯器(Cocos2dx)制作流程詳解及附上響應鼠標滾軸事件、反轉坐標系、導入/創建資源目錄等知識點代碼!
- 【Cocos2d-X(2.x) 游戲開發系列之一】cocos2dx(v2.x)與(v1.x)的一些常用函數區別講解!在2.x版CCFileData類被去除等
- 【Cocos2d-X(2.x) 游戲開發系列之二】cocos2dx最新2.0.1版本跨平臺整合NDK+Xcode,Xcode編寫&編譯代碼,Android導入打包運行即可!
- 【Cocos2dX(2.x)_Lua開發之三】★重要必看篇★在Lua中使用自定義精靈(Lua腳本與自創建類之間的訪問)及Lua基礎講解
- 【Cocos2d-X(2.x) 游戲開發系列之三】最新版本cocos2d­2.0­x­2.0.2使用新資源加載策略!不再沿用-hd、-ipad、-ipadhd添加后綴方式
- 【Cocos2d-X(1.x 2.x) 修復篇】iOS6 中 libcurl.a 無法通過armv7s編譯以及iOS6中無法正常游戲橫屏的解決方法
- 【Cocos2d-X(1.x 2.x) 】iOS6與iphone5適相關設置隨筆(解決第三方類庫無法通過armv7s編譯的方法、添加Default-568h@2x.png)