CCSprite:精靈


層和場景是其他遊戲元素的容器,如果沒有向它們添加可見的遊戲元素,它們看起來就一直是透明的。精靈則與層和場景不同,它隸屬於層,是場景中出現的可見圖形。

玩家控制的主角、AI控制的NPC、以及地圖上的寶箱、寶石,甚至遊戲主菜單的背景圖片都是精靈。因此,可以這樣認爲,玩家看到的一切幾乎都是由精靈構成。

精靈不一定是靜態的。通常,一個精靈可以不斷的變化,變化的方式包括:移動、旋轉、縮放、變形、顯現消失、動畫效果等。精靈按照層次結構組合起來,並與玩家互動,構成一個完整的遊戲。

CCSprite可以說是遊戲中最重要的組成元素,是CCNode的一個最重要也最靈活的子類。說它重要是因爲CCSprite代表了遊戲中一個最小的可見單位,說它靈活則是由於其裝載了一個紋理,具有豐富的表現力,而且可以通過多種方式加載。


紋理

可以認爲紋理就是一張圖片,這張圖片被精靈顯示出來。更深層的講,紋理是3D遊戲中繪製到物體表面上的圖案。雖然cocos2d-x是平面遊戲引擎,但是它仍然使用了3D繪圖庫OpenGL。這樣一來,我們既可以利用圖形加速器提高繪圖效率,也可以在遊戲中加入3D變換特效,實現更絢麗的效果。爲了在3D環境中繪製平面圖形,cocos2d-x只需在3D空間中垂直於視線的平面上繪製矩形,在矩形的表面使用紋理貼圖即可。


創建精靈

  •  使用圖片文件 
static CCSprite* create(const char *pszFileName);   //適用於要顯示的是這張精靈的全部區域
static CCSprite* create(const char *pszFileName, const CCRect& rect);   //適用於要顯示的是這張精靈的部分區域
 virtual bool initWithFile(const char *pszFilename);
 virtual bool initWithFile(const char *pszFilename, const CCRect& rect);
其中pszFileName爲圖片的文件名,直接傳入圖片文件相當於"Resource"文件夾的路徑即可;
rect爲可選參數,用於指定精靈顯示紋理的部分,它是用前面介紹的紋理座標系。
  • 使用CCTexture2D
 static CCSprite* createWithTexture(CCTexture2D *pTexture); //
 static CCSprite* createWithTexture(CCTexture2D *pTexture, const CCRect& rect);
 virtual bool initWithTexture(CCTexture2D *pTexture);
 virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect);
CCTexture2D類型的pTexture參數爲紋理對象,可以使用CCTextureCache類的addImage方法把圖片文件裝載爲紋理並返回。
  • 使用CCSpriteFrame創建
static CCSprite* createWithSpriteFrame(CCSpriteFrame *pSpriteFrame);
 static CCSprite* createWithSpriteFrameName(const char *pszSpriteFrameName);
 virtual bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame);
virtual bool initWithSpriteFrameName(const char *pszSpriteFrameName);
CCSpriteFrame類型的pSpriteFrame參數爲紋理框幀,CCSpriteFrame保存了一個CCTexture2D的引用與一個CCRect來表示紋理中的部分。

關於創建精靈的幾種方法可以看這篇文章

紋理相關的屬性
CCSprite提供了一下與紋理相關的屬性,用於獲取或設置內容。
CCTexture2D *Texture: 獲取或設置精靈所用的紋理。使用此方法設置紋理後,精靈將顯示一個完整的紋理。
CCRect textureRect: 獲取或設置紋理顯示部分。此CCRect採用紋理座標,即左上角爲原點(0,0)。
CCSpriteBatchNode *BatchNode: 獲取或設置精靈所屬的批節點。

紋理相關方法
virtual void setDisplayFrame(CCSpriteFrame *pNewFrame): 設置顯示中的紋理框幀
 virtual bool isFrameDisplayed(CCSpriteFrame *pFrame); 返回一個值,表示pFrame是不是正在顯示中的紋理框幀。
 virtual CCSpriteFrame* displayFrame(void); 獲取正在顯示的紋理幀。


以上內容摘自《cocos2d-x 高級開發教程》火烈鳥網絡科技 編著




發佈了20 篇原創文章 · 獲贊 0 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章