场景类CCScene和布景类CCLayer都是作为一个容器来使用,这里简单地看下它们的实现:
场景类:CCScene
CCScene类继承于CCNode,它的实现很简单,就是基本上没添加什么内容。。。它只是作为一个容器(父节点)的抽象概念存在。对比CCNode差别有:
(1)构造函数中设置了不使用锚点定位,而是使用了坐标原点,即使设置了锚点也不起作用。
m_bIgnoreAnchorPointForPosition是CCNode的属性,用于CCScene和CCLayer。
1
| m_bIgnoreAnchorPointForPosition = true;
|
(2)在init中设置场景的大小。节点的初始化大小为CCSizeZero,也就是没有大小。CCScene初始化时设置了场景的大小,即窗口大小。
1
| this->setContentSize(pDirector->getWinSize());
|
布景类:CCLayer
CCLayer相对CCScene而言会比较麻烦一点,因为他不仅要作为容器使用,而且还要实现一些游戏功能,所以它继承了CCTouchDelegate,CCAccelerometerDelegate和CCKeypadDelegate,这三个类是用来处理触摸事件,重力感应事件和键盘事件的,默认初始化都是不可用,需要手动设置开启。
(1)CCLayer和CCScene的初始化差不多,也是构造函数中设置不使用锚点定位,init函数中设置了层的大小,即窗口大小。
(2)常用接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| 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);
|
颜色布景层:CCLayerRGBA,CCLayerColor和CCLayerGradient
(1)CCLayerRGBA和CCNodeRGBA差不多,也是用于设置RGB值和Blend值,同时可以传递到子节点。它的相关接口参见CCNodeRGBA。
(2)CCLayerColor只是一个单纯的可以绘制颜色的层。可以带入长宽参数,绘制一个矩形的布景层。
(3)CCLayerGradient继承于CClayerColor,是一个带有渐变效果的布景层。
多层布景层:CCLayerMultiplex
CCLayerMultiplex继承与CCLayer,相当于一个层容器,他可以包含多个层,但是同一时间只能显示一个CCLayer。《我叫MT》的第一个界面菜单那一块就是这么处理的。CCLayerMultiplex最重要的函数就是:
1 2 3
| pLayerMultiplex->switchTo(item->getTag()); pLayerMultiplex->switchToAndReleaseMe(item->getTag());
|
两者的差别在于是否释放当前处于活动的布景层。