【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer
2013-10-14 14:34
429 查看
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12708811
场景类CCScene和布景类CCLayer都是作为一个容器来使用,这里简单地看下它们的实现:
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());
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);
(1)CCLayerRGBA和CCNodeRGBA差不多,也是用于设置RGB值和Blend值,同时可以传递到子节点。它的相关接口参见CCNodeRGBA。
(2)CCLayerColor只是一个单纯的可以绘制颜色的层。可以带入长宽参数,绘制一个矩形的布景层。
(3)CCLayerGradient继承于CClayerColor,是一个带有渐变效果的布景层。
CCLayerMultiplex继承与CCLayer,相当于一个层容器,他可以包含多个层,但是同一时间只能显示一个CCLayer。《我叫MT》的第一个界面菜单那一块就是这么处理的。CCLayerMultiplex最重要的函数就是:
[cpp] view
plaincopy
//切换布景层
pLayerMultiplex->switchTo(item->getTag());
pLayerMultiplex->switchToAndReleaseMe(item->getTag());
两者的差别在于是否释放当前处于活动的布景层。
场景类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());
两者的差别在于是否释放当前处于活动的布景层。
相关文章推荐
- Cocoa2D 实现半透明暂停菜单
- cocos2d-x中的无法使用replaceScene跳转的问题
- cocos2d-x 自定义一个场景
- CCScene和CCLayer类详解
- 【cocos2d-x入门实战】微信飞机大战之二:别急,先处理好CCScene和CCLayer的关系
- cocos2d-x初学笔记04:切换场景Scene
- IOS cocos2d学习笔记-<二>CCScene、CCLayer、CCSprite的关系
- Cocos2D-iphone 场景切换
- Cocos2D-iphone CCLayer中的两种触摸(touch)处理方式
- Cocos2d-x 中CCLayer继承图表
- 【iOS-Cocos2d开发之三】CCScene切换的所有特效,以及设置屏幕横竖屏!
- 使用CClayerMultiplex实现层切换
- Cocos2d-x UIView和Coco2d-x场景之间的相互跳转切换
- iOS_31_cocos2d_图层CCLayer_加速计
- iOS_31_cocos2d_CCScene
- Cocos2d之CCScene
- cocos2d-x 详解之 CCLayer(触摸事件)
- cocod2d-x--关于场景切换,CCAction未执行完,仍持有引用造成内存泄漏
- Cocos2d-x 之图层类(CCLayer)
- Cocos2d-x 之场景类(CCScene)