您的位置:首页 > 移动开发 > Cocos引擎

【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer

2015-07-21 15:09 579 查看
原创作品,转载请标明:/article/1384968.html

场景类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();



//分配内存,标记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最重要的函数就是:

[cpp] view
plaincopy

//切换布景层

pLayerMultiplex->switchTo(item->getTag());

pLayerMultiplex->switchToAndReleaseMe(item->getTag());

两者的差别在于是否释放当前处于活动的布景层。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: