緊接着上一節,我們來深入了解一下CCSprite對象,這個對象比較核心,在繼續進行下面的學習之前我們需要對它有足夠的了解。
與其說是了解CCSprite對象,其實是了解以CCSprite為中心的,同時包括與CCSprite緊密相關的一些對象,比如:CCContext2D,CCSpriteFrame等。
你可以新建一個場景類來寫相關的代碼,也可以利用之前已經有的,然后修改它們的init方法即可。出於保持現場的原因,我重新創建了一個SpriteObject的類。
CCSprite的創建:
一般我們通過CCSprite提供的工廠方法來創建CCSprite對象,而CCSprite提供了不止一個這樣的方法,我們分別來看:
1.最簡單的create(),該方法不帶任何參數,通過它可以返回一個不帶紋理的空CCSprite對象,當然創建成功之后你可以調用CCSprite對象的初始化方法進行初始化。
CCSprite * pSprite = CCSprite::create();
2.通過指定圖片文件名來創建create(const char * pszFileName),該方法的參數是圖片文件的資源位置。
CCSprite * pSprite = CCSprite::create("Alcedo256.jpg");
3.通過指定圖片文件名並給出圖片顯示區域create (const char *pszFileName, const CCRect &rect),第二個參數是CCRect對象的引用。
CCRect rect; rect.setRect(0,0,100,100); CCSpriteFrame * pFrame = CCSpriteFrame::create("Alcedo256.jpg",rect); CCSprite * pSprite3 = CCSprite::createWithSpriteFrame(pFrame);
4.通過指定CCTexture2D材質對象來創建createWithTexture (CCTexture2D *pTexture),這里的參數類型是一個我們之前沒見過的類。我們知道Cocos2d是基於顯卡編程的,因此在創建顯示對象時,我們實際上是通過紋理貼圖來讓它們擁有豐富的顯示內容的。實際上紋理貼圖才是CCSprite對象的內部顯示原理,而之前的兩個方法只是將紋理對象的創建封裝到了內部。
為了創建紋理,我們首先需要一個CCImage對象,具體見下:
CCImage * image = new CCImage(); image->initWithImageFile("Alcedo256.jpg",CCImage::kFmtJpg);//指定圖片路徑和圖片格式 CCTexture2D * tex = new CCTexture2D(); tex->initWithImage(image);
這樣一個紋理便可用了:
CCSprite * pSprite2 = CCSprite::createWithTexture(tex);
5.通過上面的方法創建出來的CCSprite對象的顯示區域為整個紋理,通過createWithTexture (CCTexture2D *pTexture, const CCRect &rect)方法可以給CCSprite對象指定顯示區域:
CCRect rect; rect.setRect(0,0,100,100); CCSprite * pSprite2 = CCSprite::createWithTexture(tex,rect);
6.最后我們來看通過CCSpriteFrame對象創建CCSprite的兩個方法:createWithSpriteFrame (CCSpriteFrame *pSpriteFrame)和createWithSpriteFrameName (const char *pszSpriteFrameName),其實主要是前一個方法。
這里的關鍵是CCSpriteFrame是什么?CCSpriteFrame擁有一個紋理對象(CCTexture2D)和一個矩形對象(CCRect),我們可以將它理解為CCSprite和CCTexture2D的中間者,CCSprite通過CCSpriteFrame來了解需要顯示的內容以及顯示的區域。具體地:
CCRect rect; rect.setRect(0,0,100,100); CCSpriteFrame * pFrame = CCSpriteFrame::create("Alcedo256.jpg",rect); CCSprite * pSprite3 = CCSprite::createWithSpriteFrame(pFrame);
至於createWithSpriteFrameName (const char *pszSpriteFrameName)方法則是通過給定CCSpriteFrame的名稱來創建CCSprite,不過這個名稱不是任意的,你需要事先注冊過。CCSpriteFrameCache提供了緩存CCSpriteFrame的功能,它有一套管理CCSpriteFrame對象的方法。
最后介紹一個設置錨點(注冊點的方法):setAnchorPoint (const CCPoint &anchor)。
我們知道默認的顯示對象的錨點在現實對象的中心,通過這個方法我們可以改變錨點的相對位置,說相對的原因時我們需要提供的參數是一個百分比:
setAnchorPoint(ccp(0,0)); setAnchorPoint(ccp(0.5,0.5));
上面的兩個操作分別將顯示對象的錨點設置為左下角和中心點。
資源地址:https://github.com/Physwf/physwf-c-lab/tree/master/Cocos2d-x%20Tutorial/3