生活随笔
收集整理的這篇文章主要介紹了
【玩转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。
[cpp]?view plaincopy
m_bIgnoreAnchorPointForPosition?=?true; ?
(2)在init中設置場景的大小。節點的初始化大小為CCSizeZero,也就是沒有大小。CCScene初始化時設置了場景的大小,即窗口大小。
[cpp]?view plaincopy
this->setContentSize(pDirector->getWinSize());??
2.布景類:CCLayer
CCLayer相對CCScene而言會比較麻煩一點,因為他不僅要作為容器使用,而且還要實現一些游戲功能,所以它繼承了CCTouchDelegate,CCAccelerometerDelegate和CCKeypadDelegate,這三個類是用來處理觸摸事件,重力感應事件和鍵盤事件的,默認初始化都是不可用,需要手動設置開啟。
(1)CCLayer和CCScene的初始化差不多,也是構造函數中設置不使用錨點定位,init函數中設置了層的大小,即窗口大小。
(2)常用接口:
[cpp]?view plaincopy
?? virtual?bool?init();?? ?? ?? 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);?? ?? ?? virtual?void?registerWithTouchDispatcher(void);?? ?? ?? virtual?bool?isTouchEnabled();?? virtual?void?setTouchEnabled(bool?value);?? ?? ?? virtual?void?setTouchMode(ccTouchesMode?mode);?? virtual?int?getTouchMode();?? ?? ?? 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最重要的函數就是:
[cpp]?view plaincopy
?? pLayerMultiplex->switchTo(item->getTag());?? pLayerMultiplex->switchToAndReleaseMe(item->getTag()); ?
兩者的差別在于是否釋放當前處于活動的布景層。
總結
以上是生活随笔為你收集整理的【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。