【玩轉cocos2d-x之七】場景類CCScene和佈景類CCLayer

原創作品,轉載請標明:http://blog.csdn.net/jackystudio/article/details/12708811


場景類CCScene和佈景類CCLayer都是作爲一個容器來使用,這裏簡單地看下它們的實現:


1.場景類:CCScene


CCScene類繼承於CCNode,它的實現很簡單,就是基本上沒添加什麼內容。。。它只是作爲一個容器(父節點)的抽象概念存在。對比CCNode差別有:

(1)構造函數中設置了不使用錨點定位,而是使用了座標原點,即使設置了錨點也不起作用。

m_bIgnoreAnchorPointForPosition是CCNode的屬性,用於CCScene和CCLayer。

  1. m_bIgnoreAnchorPointForPosition = true;  
(2)在init中設置場景的大小。節點的初始化大小爲CCSizeZero,也就是沒有大小。CCScene初始化時設置了場景的大小,即窗口大小。

  1. this->setContentSize(pDirector->getWinSize());  

2.佈景類:CCLayer


CCLayer相對CCScene而言會比較麻煩一點,因爲他不僅要作爲容器使用,而且還要實現一些遊戲功能,所以它繼承了CCTouchDelegate,CCAccelerometerDelegate和CCKeypadDelegate,這三個類是用來處理觸摸事件,重力感應事件和鍵盤事件的,默認初始化都是不可用,需要手動設置開啓。

(1)CCLayer和CCScene的初始化差不多,也是構造函數中設置不使用錨點定位,init函數中設置了層的大小,即窗口大小。

(2)常用接口:

  1. //初始化函數,添加精靈就在這裏進行  
  2. virtual bool init();  
  3.   
  4. //分配內存,標記autoRelease  
  5. static CCLayer *create(void);  
  6.   
  7. //層進入回調  
  8. virtual void onEnter();  
  9. //層退出回調  
  10. virtual void onExit();  
  11. //如果層進入帶效果,效果完成時回調  
  12. virtual void onEnterTransitionDidFinish();  
  13.   
  14. //觸摸事件(單點和多點)  
  15. virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);  
  16. virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);  
  17. virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);  
  18. virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);  
  19. virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);  
  20. virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);  
  21. virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);  
  22. virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);  
  23.   
  24. //重力感應相關  
  25. virtual void didAccelerate(CCAcceleration* pAccelerationValue);  
  26. void registerScriptAccelerateHandler(int nHandler);  
  27. void unregisterScriptAccelerateHandler(void);  
  28.   
  29. //註冊觸摸分發,默認是addStandardDelegate  
  30. virtual void registerWithTouchDispatcher(void);  
  31.   
  32. //設置/獲取釋放觸摸可用  
  33. virtual bool isTouchEnabled();  
  34. virtual void setTouchEnabled(bool value);  
  35.   
  36. //設置/獲取觸摸模式  
  37. virtual void setTouchMode(ccTouchesMode mode);  
  38. virtual int getTouchMode();  
  39.   
  40. //設置/獲取觸摸優先級,默認爲0  
  41. virtual void setTouchPriority(int priority);  
  42. virtual int getTouchPriority();  
  43.   
  44. //設置/獲取是否接收重力感應事件  
  45. virtual bool isAccelerometerEnabled();  
  46. virtual void setAccelerometerEnabled(bool value);  
  47. virtual void setAccelerometerInterval(double interval);  
  48.   
  49. //設置/獲取是否接收鍵盤事件  
  50. virtual bool isKeypadEnabled();  
  51. virtual void setKeypadEnabled(bool value);  
  52.   
  53. //返回鍵和菜單鍵的回調,需要設置接收鍵盤事件  
  54. virtual void keyBackClicked(void);  
  55. virtual void keyMenuClicked(void);  

3.顏色佈景層:CCLayerRGBA,CCLayerColor和CCLayerGradient


(1)CCLayerRGBA和CCNodeRGBA差不多,也是用於設置RGB值和Blend值,同時可以傳遞到子節點。它的相關接口參見CCNodeRGBA。

(2)CCLayerColor只是一個單純的可以繪製顏色的層。可以帶入長寬參數,繪製一個矩形的佈景層。

(3)CCLayerGradient繼承於CClayerColor,是一個帶有漸變效果的佈景層。


4.多層佈景層:CCLayerMultiplex


CCLayerMultiplex繼承與CCLayer,相當於一個層容器,他可以包含多個層,但是同一時間只能顯示一個CCLayer。《我叫MT》的第一個界面菜單那一塊就是這麼處理的。CCLayerMultiplex最重要的函數就是:

  1. //切換佈景層  
  2. pLayerMultiplex->switchTo(item->getTag());  
  3. pLayerMultiplex->switchToAndReleaseMe(item->getTag());  
兩者的差別在於是否釋放當前處於活動的佈景層。
發佈了107 篇原創文章 · 獲贊 45 · 訪問量 126萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章