原創作品,轉載請標明:http://blog.csdn.net/jackystudio/article/details/12708811
場景類CCScene和佈景類CCLayer都是作爲一個容器來使用,這裏簡單地看下它們的實現:
1.場景類:CCScene
CCScene類繼承於CCNode,它的實現很簡單,就是基本上沒添加什麼內容。。。它只是作爲一個容器(父節點)的抽象概念存在。對比CCNode差別有:
(1)構造函數中設置了不使用錨點定位,而是使用了座標原點,即使設置了錨點也不起作用。
m_bIgnoreAnchorPointForPosition是CCNode的屬性,用於CCScene和CCLayer。
- m_bIgnoreAnchorPointForPosition = true;
- this->setContentSize(pDirector->getWinSize());
2.佈景類:CCLayer
CCLayer相對CCScene而言會比較麻煩一點,因爲他不僅要作爲容器使用,而且還要實現一些遊戲功能,所以它繼承了CCTouchDelegate,CCAccelerometerDelegate和CCKeypadDelegate,這三個類是用來處理觸摸事件,重力感應事件和鍵盤事件的,默認初始化都是不可用,需要手動設置開啓。
(1)CCLayer和CCScene的初始化差不多,也是構造函數中設置不使用錨點定位,init函數中設置了層的大小,即窗口大小。
(2)常用接口:
- //初始化函數,添加精靈就在這裏進行
- virtual bool init();
- //分配內存,標記autoRelease
- static CCLayer *create(void);
- //層進入回調
- virtual void onEnter();
- //層退出回調
- virtual void onExit();
- //如果層進入帶效果,效果完成時回調
- virtual void onEnterTransitionDidFinish();
- //觸摸事件(單點和多點)
- virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
- virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
- virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
- virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
- virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
- virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
- virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
- virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);
- //重力感應相關
- virtual void didAccelerate(CCAcceleration* pAccelerationValue);
- void registerScriptAccelerateHandler(int nHandler);
- void unregisterScriptAccelerateHandler(void);
- //註冊觸摸分發,默認是addStandardDelegate
- virtual void registerWithTouchDispatcher(void);
- //設置/獲取釋放觸摸可用
- virtual bool isTouchEnabled();
- virtual void setTouchEnabled(bool value);
- //設置/獲取觸摸模式
- virtual void setTouchMode(ccTouchesMode mode);
- virtual int getTouchMode();
- //設置/獲取觸摸優先級,默認爲0
- virtual void setTouchPriority(int priority);
- virtual int getTouchPriority();
- //設置/獲取是否接收重力感應事件
- virtual bool isAccelerometerEnabled();
- virtual void setAccelerometerEnabled(bool value);
- virtual void setAccelerometerInterval(double interval);
- //設置/獲取是否接收鍵盤事件
- virtual bool isKeypadEnabled();
- virtual void setKeypadEnabled(bool value);
- //返回鍵和菜單鍵的回調,需要設置接收鍵盤事件
- virtual void keyBackClicked(void);
- 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最重要的函數就是:
- //切換佈景層
- pLayerMultiplex->switchTo(item->getTag());
- pLayerMultiplex->switchToAndReleaseMe(item->getTag());