• [置顶] 【玩转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 plain copy
     
    1. m_bIgnoreAnchorPointForPosition = true;  

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

     

    [cpp]  view plain copy
     
    1. this->setContentSize(pDirector->getWinSize());  

    2.布景类:CCLayer


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

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

    (2)常用接口:

     

    [cpp]  view plain copy
     
    1. //初始化函数,添加精灵就在这里进行  
    2. virtual bool init();  
    3.   
    4. //分配内存,标记autoRelease  
    5. static CCLayer *create(void);  
    6.   
    7. //层进入回调  
    8. virtual void onEnter();  
    9. //层退出回调  
    10. virtual void onExit();  
    11. //如果层进入带效果,效果完成时回调  
    12. virtual void onEnterTransitionDidFinish();  
    13.   
    14. //触摸事件(单点和多点)  
    15. virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);  
    16. virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);  
    17. virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);  
    18. virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);  
    19. virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);  
    20. virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);  
    21. virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);  
    22. virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);  
    23.   
    24. //重力感应相关  
    25. virtual void didAccelerate(CCAcceleration* pAccelerationValue);  
    26. void registerScriptAccelerateHandler(int nHandler);  
    27. void unregisterScriptAccelerateHandler(void);  
    28.   
    29. //注册触摸分发,默认是addStandardDelegate  
    30. virtual void registerWithTouchDispatcher(void);  
    31.   
    32. //设置/获取释放触摸可用  
    33. virtual bool isTouchEnabled();  
    34. virtual void setTouchEnabled(bool value);  
    35.   
    36. //设置/获取触摸模式  
    37. virtual void setTouchMode(ccTouchesMode mode);  
    38. virtual int getTouchMode();  
    39.   
    40. //设置/获取触摸优先级,默认为0  
    41. virtual void setTouchPriority(int priority);  
    42. virtual int getTouchPriority();  
    43.   
    44. //设置/获取是否接收重力感应事件  
    45. virtual bool isAccelerometerEnabled();  
    46. virtual void setAccelerometerEnabled(bool value);  
    47. virtual void setAccelerometerInterval(double interval);  
    48.   
    49. //设置/获取是否接收键盘事件  
    50. virtual bool isKeypadEnabled();  
    51. virtual void setKeypadEnabled(bool value);  
    52.   
    53. //返回键和菜单键的回调,需要设置接收键盘事件  
    54. virtual void keyBackClicked(void);  
    55. 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 plain copy
     
    1. //切换布景层  
    2. pLayerMultiplex->switchTo(item->getTag());  
    3. pLayerMultiplex->switchToAndReleaseMe(item->getTag());  

    两者的差别在于是否释放当前处于活动的布景层。

  • 相关阅读:
    flask之视图
    android studio 配置阿里云镜像 加速
    mac idea phpstorm 提示 clear read-only status 解决办法
    如何给网站一键变黑?如哀悼日,一行css代码解决
    Android base64加密中文乱码问题解决记录
    微信Android app支付 重要记录,重要!!
    mysql 数据库拷贝innodb 操作注意事项,宝塔面板
    Linux 服务器使用shell脚本 实现 间隔N秒访问url
    echarts pie饼图块颜色设置
    Linux 服务器 node 节点满了引发的灾难,请定期清理node节点
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3369571.html
Copyright © 2020-2023  润新知