cocos2d-x總結(五)CCSprite精靈的加載與常用操作


精靈是2D游戲中得主角,這次就總結一下cocos2d-x中精靈的使用。

一,加載

首先,創建一個變量 CCSprite *pSprite;

加載函數分為兩組initWithXXXX和spriteWithXXXX,其主要的區別是使用initWithXXXX的手工作業,而spriteWithXXXX是純自動化作業。在SpriteWithXXXX中,先分配內存,然后加載,最后加入到autorelease中。而前者只有加載的部分,分配內存以及釋放都需要靠自己。下邊全部以spriteWithXXXX函數說明。

1,從文件中直接加載

從文件中加載很簡單,只需要 CCSprite::spriteWithFile("文件完整名稱"); 其中文件名必須是完整路徑,用cocos2d-x生成的項目中Resources目錄為根目錄。若有一個文件目錄為..\Resources\chars\a.png 則 文件名部分就應該為"chars/a.png"。值得注意的是,在WINDOWS下,后綴名大寫小寫無所謂,但是在MAC下,后綴的大小寫必須與文件完全一致,否則無法加載。

此函數還有一個重載函數,后邊多一個CCRect參數,可以通過此參數設定加載圖片中某個矩形區域。

2,間接加載

有些經常被用到或者需要頻繁加載移除的一些資源,如果每次都從文件中加載,程序的效率會變得非常低,通常的做法是將這些文件先讀到緩存中,然后再從緩存中加載。

CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename);

這個函數將一個圖片加入緩存並返回一個CCTexture2D的指針。然后就可以

pSprite = CCSprite::spriteWithTexture(pTexture);

如果一個資源已經被加入到了緩存,addImage是不會再加一遍的。程序中我很少會直接用spriteWithTexture這個函數,因為需要保存pTexture的指針。而在spriteWithFile函數中起內部就已經使用了上述過程。

另一種間接加載方法是利用SpriteFrame。SpriteFrame是把一個大的圖片划分掉,每一個矩形區域就是一個SpriteFrame。其實如果這個SpriteFrame在大圖中的矩形區域已知的話,可以直接使用CCTexture2D的方式,使用CCRect參數。SpriteFrame給我們提供了一種快捷,簡便的方式,就是將這個矩形區域信息保存到plist文件中,並通過一個名稱作為索引。生成這種大圖也有很多工具,我使用過兩種工具,一個是 Zwoptex 是一個在線的免費工具,另一個我常用的是 TexturePacker。這是一個收費軟件,不過免費版也能滿足基本的需要。這兩種工具可以生成一個.plist文件和一個圖片文件。存放的時候講這兩個關聯的文件放在同一個目錄下。在需要使用的時候,我們可以將它加載到緩存中:

CCSpriteFrameCache *pCache = CCSpriteFrameCache::sharedSpriteFrameCache();

pCache->addSpriteFramesWithFile("XXXX.plist");

其中plist文件的路徑是完整路徑。

然后可以用兩種方式加載

pSprite = CCSprite::spriteWithSpriteFrame(pCache->spriteFrameByName(szFrameName));

pSprite = CCSprite::spriteWithSpriteFrameName(szFrameName);

看起來第一個函數比較麻煩,實際上,第二個函數調用的是第一個函數。。。。值得說明的是,這里的szFrameName不需要完整路徑,而是文件名索引。

 

二,常用操作

精靈加載完了就改各種使用了。

1,錨點

錨點就是所有旋轉,移動,縮放的參考點。cocos2-x中默認的錨點是中心點。錨點用比例來表示范圍為0-1,(0,0)點代表左下點,(1,1)代表右上點。設置的函數為setAnchorPoint(ccp(0.5, 0.5));

2,旋轉

setRotation(angle) 其中angle為角度不是弧度。正數為順時針旋轉,負數為逆時針旋轉。

3,位置

setPosition(ccp(xPos, yPos)) xPos和yPos為相對於父節點錨點的位置。

4,縮放

setScale(s);   // 整體縮放

setScaleX(s); // 原圖片坐標X軸縮放

setScaleY(s); // 原圖片坐標Y軸縮放

s為比例,s = 1表示原尺寸。

5,傾斜

setSkewX(s); // 原圖片坐標X軸傾斜

setSkewY(s); // 原圖片坐標Y軸傾斜

X軸向右為正,Y軸向上為正。

6,透明度

setOpacity(s);

s范圍0-255,0完全透明,255完全不透明。

7,可見

setIsVisible(bVisible)

bVisible為bool值true代表可見false代表不可見

8,翻轉

setFlipX(bFlip);  // 水平翻轉

setFlipY(bFlip);  // 豎直翻轉

bFlip為true,則圖片翻轉,false不翻轉。注意,翻轉是針對原圖片的操作,水平翻轉相當於在圖片編輯軟件里水平翻轉一樣。不根據錨點進行翻轉。翻轉以后,設置的以前設置的錨點不會隨着圖片的翻轉而改變。比如設置右下角為錨點,則翻轉以后,錨點為翻轉后的圖片的右下角(是不是有點繞?)

最后,初始化完成后,不要忘了使用addChild加入到父節點,否則是不會顯示的。


免責聲明!

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



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