【玩转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。

  1. m_bIgnoreAnchorPointForPosition=true;
(2)在init中设置场景的大小。节点的初始化大小为CCSizeZero,也就是没有大小。CCScene初始化时设置了场景的大小,即窗口大小。

  1. this->setContentSize(pDirector->getWinSize());

2.布景类:CCLayer


CCLayer相对CCScene而言会比较麻烦一点,因为他不仅要作为容器使用,而且还要实现一些游戏功能,所以它继承了CCTouchDelegate,CCAccelerometerDelegate和CCKeypadDelegate,这三个类是用来处理触摸事件,重力感应事件和键盘事件的,默认初始化都是不可用,需要手动设置开启。

(1)CCLayer和CCScene的初始化差不多,也是构造函数中设置不使用锚点定位,init函数中设置了层的大小,即窗口大小。

(2)常用接口:

  1. //初始化函数,添加精灵就在这里进行
  2. virtualboolinit();
  3. //分配内存,标记autoRelease
  4. staticCCLayer*create(void);
  5. //层进入回调
  6. virtualvoidonEnter();
  7. //层退出回调
  8. virtualvoidonExit();
  9. //如果层进入带效果,效果完成时回调
  10. virtualvoidonEnterTransitionDidFinish();
  11. //触摸事件(单点和多点)
  12. virtualboolccTouchBegan(CCTouch*pTouch,CCEvent*pEvent);
  13. virtualvoidccTouchMoved(CCTouch*pTouch,CCEvent*pEvent);
  14. virtualvoidccTouchEnded(CCTouch*pTouch,CCEvent*pEvent);
  15. virtualvoidccTouchCancelled(CCTouch*pTouch,CCEvent*pEvent);
  16. virtualvoidccTouchesBegan(CCSet*pTouches,CCEvent*pEvent);
  17. virtualvoidccTouchesMoved(CCSet*pTouches,CCEvent*pEvent);
  18. virtualvoidccTouchesEnded(CCSet*pTouches,CCEvent*pEvent);
  19. virtualvoidccTouchesCancelled(CCSet*pTouches,CCEvent*pEvent);
  20. //重力感应相关
  21. virtualvoiddidAccelerate(CCAcceleration*pAccelerationValue);
  22. voidregisterScriptAccelerateHandler(intnHandler);
  23. voidunregisterScriptAccelerateHandler(void);
  24. //注册触摸分发,默认是addStandardDelegate
  25. virtualvoidregisterWithTouchDispatcher(void);
  26. //设置/获取释放触摸可用
  27. virtualboolisTouchEnabled();
  28. virtualvoidsetTouchEnabled(boolvalue);
  29. //设置/获取触摸模式
  30. virtualvoidsetTouchMode(ccTouchesModemode);
  31. virtualintgetTouchMode();
  32. //设置/获取触摸优先级,默认为0
  33. virtualvoidsetTouchPriority(intpriority);
  34. virtualintgetTouchPriority();
  35. //设置/获取是否接收重力感应事件
  36. virtualboolisAccelerometerEnabled();
  37. virtualvoidsetAccelerometerEnabled(boolvalue);
  38. virtualvoidsetAccelerometerInterval(doubleinterval);
  39. //设置/获取是否接收键盘事件
  40. virtualboolisKeypadEnabled();
  41. virtualvoidsetKeypadEnabled(boolvalue);
  42. //返回键和菜单键的回调,需要设置接收键盘事件
  43. virtualvoidkeyBackClicked(void);
  44. virtualvoidkeyMenuClicked(void);

3.颜色布景层:CCLayerRGBA,CCLayerColor和CCLayerGradient


(1)CCLayerRGBA和CCNodeRGBA差不多,也是用于设置RGB值和Blend值,同时可以传递到子节点。它的相关接口参见CCNodeRGBA。

(2)CCLayerColor只是一个单纯的可以绘制颜色的层。可以带入长宽参数,绘制一个矩形的布景层。

(3)CCLayerGradient继承于CClayerColor,是一个带有渐变效果的布景层。


4.多层布景层:CCLayerMultiplex


CCLayerMultiplex继承与CCLayer,相当于一个层容器,他可以包含多个层,但是同一时间只能显示一个CCLayer。《我叫MT》的第一个界面菜单那一块就是这么处理的。CCLayerMultiplex最重要的函数就是:

  1. //切换布景层
  2. pLayerMultiplex->switchTo(item->getTag());
  3. pLayerMultiplex->switchToAndReleaseMe(item->getTag());
两者的差别在于是否释放当前处于活动的布景层。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值