zoukankan      html  css  js  c++  java
  • Cocos2d-x学习笔记(六)之 场景类CCScene

      CCScene 类是CCNode 的子类。和CCNode 相比,它只是添加了一个特性,那就是拥有自己的锚点,位置在屏幕的正中央。除此之外,它目前还没有额外的功能,只是一个抽象的概念。CCScene类的继承关系如下:

      CCTransitionScene-->CCScene-->CCNode-->CCObject-->CCCopying

      可以看到,CCScene 类有CCTransitionScene(切换场景类),并且CCTransitionScene 类有很多子类,这些类都用于切换场景的特效。注意:游戏通常都会出现这种情况,当切换场景时,程序会由于旧场景的内存没有释放并且新场景已经载入,出现短暂的“峰值”,但是不必为此而做额外的工作,因为Cocos2D-x 引擎会清除旧场景的内存。但是要注意,正确使用内存的保留与释放,尤其是使用场景切换特效的时候,你要做的工作是尽早上机测试和合理的内存使用。

      1、创建场景类

     1      //创建场景类
     2     CCScene *scene = CCScene::create();
     3     
     4     // 新建层
     5     HelloWorld *layer = HelloWorld::create();
     6 
     7     // 将层加入到场景中。
     8     scene->addChild(layer);
     9 
    10     // 返回场景
    11     return scene;

      2、获得并运行场景

    1     // 创建场景
    2     CCScene *pScene = HelloWorld::scene();
    3 
    4     // 运行场景
    5     CCDirector::sharedDirector()->runWithScene(pScene);

      3、替换场景

    1     CCDirector::sharedDirector()->replaceScene(this);

      替换场景分为三个步骤:

      1)调用CCDirector::sharedDirector()->purgeCachedData() 清空缓存。

      2)新建场景。

      3)调用CCDirector::sharedDirector()->replaceScene(this) 替换新场景。

      注意:不要在节点初始化的init 函数中调用replaceScene 函数。导演类不允许在一个节点初始化的调用场景替换,否则会导致程序崩溃。

      这里说一下压入场景(pushScene)和弹出场景(popScene)。它们都可以用来显示场景和保留当前场景并显示新场景;不同的是它们不把旧场景从内存中释放掉,这样可以提高加载速度,这时需要注意,如果内存不足以支撑的话,建议采用replaceScene 函数。

      下面我们来看一下场景的切换,场景的切换中就会有场景切换的动画,正常的无过渡场景,如果尚未建立场景(游戏中的第一个场景),使用runWithScene函数即可以使用相应场景;如果是替换场景,则使用replaceScene 函数替换相应的场景即可;而如果要使用场景间的切换效果,则需要使用相应的切换类。当然,不同效果的使用方法略有不同。然后,通过replaceScene 函数启动场景,也就是说给这个场景加了一个外包装类,然后再启动。那么,这个场景就不是直接显示了,而是在场景的效果动画播完以后进入场景,起到过渡的效果。一般情况下,CCTransitionScene 子类的create 函数有两个参数。第一个参数是特效的切换时间,直接生成一个CCTime 类即可,例子中设定的时间是1 ~ 2s,对于很多场景的显示都很舒服,你也可以根据你的要求修改切换时间;第二个参数是要进入的场景。有的类会有第三个参数。如果需要第三个参数下面介绍动画类时会在后面用()标注。

      下面就详细介绍一下场景切换动画类:

      CCTransitionJumpZoom:跳跃式,原场景先缩小,然后新场景跳跃进来。

      CCTransitionFade:淡出淡入,原场景淡出,新场景淡入。(为渐变的颜色,如ccWHITE)

      CCTransitionFlipX:x 轴平移移动。(kOrientationLeftOver:向左平移、kOrientationRightOver:向右平移)

      CCTransitionFlipY:Y 轴平移移动。(kOrientationUpOver:向上平移、kOrientationDownOver:向下平移)

      CCTransitionFlipAngular:水平角度翻转。(kOrientationLeftOver:向左翻、kOrientationRightOver:向右翻)

      CCTransitionZoomFlipX:带缩放效果的x 轴平移。(kOrientationLeftOver:向左平移、kOrientationRightOver:向右平移)

      CCTransitionZoomFlipY:带缩放效果的y 轴平移。(kOrientationUpOver:向上平移、kOrientationDownOver:向下平移)

      CCTransitionZoomFlipAngular:带缩放效果的旋转。(kOrientationLeftOver:向左翻、kOrientationRightOver:向右翻)

      CCTransitionShrinkGrow:交错切换。

      CCTransitionRotoZoom:转角切换。

      CCTransitionMoveInL:新场景从左移入覆盖。

      CCTransitionMoveInR:新场景从右移入覆盖。

      CCTransitionMoveInT:新场景从上移入覆盖。

      CCTransitionMoveInB:新场景从下移入覆盖。

      CCTransitionSlideInL:新场景从左移入推出原场景。

      CCTransitionSlideInR:新场景从右移入推出原场景。

      CCTransitionSlideInT:新场景从上移入推出原场景。

      CCTransitionSlideInB:新场景从下移入推出原场景。

      CCTransitionFadeTR:向右上波浪。

      CCTransitionFadeBL:向左下波浪。

      CCTransitionFadeUp:向上百叶窗。

      CCTransitionFadeDown:向下百叶窗。

      CCTransitionTurnOffTiles:随机小方块切换。

      CCTransitionSplitRows:按行切换。

      CCTransitionSplitCols:按列切换。

      CCTransitionPageTurn:翻页。(false:前翻true:后翻)

      其中,CCTransitionPageTurn 类需要先设置摄像机,使用以下代码:

    1 CCDirector::sharedDirector()->setDepthTest(true);

      CCTransitionCrossFade(淡出淡入交叉,同时进行)、CCTransitionRadialCCW(顺时针切入)、CCTransitionRadialCW(逆时针切入)这三种特效需要检测OpenGL版本支持,使用如下方式进行检测,如果为真则不支持。

    1 CCConfiguration::sharedConfiguration()->getGlesVersion() <= GLES_VER_1_0
  • 相关阅读:
    nginx+uWSGI+django+virtualenv+supervisor发布web服务器
    Nginx负载均衡
    python操作 redis
    Python之Linux下的 virtualenv
    python习题:写一个函数-校验字符串是否为合法的小数
    python习题:修改文件里的内容
    python习题:如果同一个ip地址60s之内访问超过200次,那么就把这个ip地址加入黑名单
    python自动化测试-D4-学习笔记之三(函数)
    python自动化测试-D4-学习笔记之二(集合)
    python自动化测试-D4-学习笔记之一(文件读写补充)
  • 原文地址:https://www.cnblogs.com/atong/p/3272520.html
Copyright © 2011-2022 走看看