Cocos2d-x入門教程(三)CCSprite對象


緊接着上一節,我們來深入了解一下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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM