《Cocos2D权威指南》——3.3 CCScene场景类

    xiaoxiao2022-06-08  218

    3.3 CCScene场景类

    CCScene是CCNode的子类,和CCNode一样,也是一个抽象类。事实上,CCScene和CCNode几乎完全相同,唯一差异在于CCScene的锚点位置默认在屏幕中心。如果打开模板中CCScene.h文件,大家会发现其中只说明CCScene继承自CCNode,并没有任何其他内容。图3-4是典型的游戏场景跳转示意图。当前版本的Cocos2D中,CCScene类基本上没有附加任何逻辑机制和特殊功能。通常建议将CCScene作为其他所有节点的父节点,看作CCLayer(层)对象的一个容器。需要说明的是,通常CCScene的子节点都直接继承自CCLayer,CCLayer包含各个游戏对象。因为大多数情况下场景对象本身不包含任何游戏相关的代码,而且很少被子类化,所以它一般在CCLayer对象里通过+(id)scene静态方法来创建。

    示例代码如下:

    +(id) scene{ CCScene *scene = [CCScene node]; CCLayer* layer = [HelloWorld node]; [scene addChild:layer]; return scene; }

    此外,如果要实现各种动画效果的场景切换,必须基于CCScene的场景切换。3.3.1 CCTransitionScene场景切换CCTransitionScene继承自CCScene,而所有场景过渡效果的类都继承自CCTransitionScene。CCTransitionScene的几个基本方法如下。(1)-(void)finish该方法在过渡效果结束时调用。(2)-(void)hideOutShowIn部分过渡效果会使用该方法来隐藏更外面的场景。(3)-(id)initWithDuration:(ccTime)tscene:(CCScene *)s该方法初始化一个场景过渡效果,并指定过渡时间和即将过渡的场景。(4)+(id)transitionWithDuration:(ccTime)tscene:(CCScene *)s该方法创建一个基本的场景过渡效果,并指定过渡时间和即将过渡的场景。虽然过渡效果的名称和需要的参数数量很多,但是添加场景间的过渡效果只需要增加一行代码而已。以一个最简单的淡入淡出过渡效果为例,场景在1秒内过渡到白色。这里把第2章示例游戏中用到的onRestartGame方法更改成如代码清单3-6所示。代码清单3-6 onRestartGame更改

    -(void) onRestartGame{ // 初始化一个过渡场景 CCTransitionFade* transitionScene = [CCTransitionFade transitionWithDuration:1scene:[HelloWorldLayer scene] withColor:ccWHITE]; // 使用过渡场景对象替代HelloWorld场景 [[CCDirector sharedDirector] replaceScene:transitionScene]; }

    注意 CCTransitionScene可以结合replaceScene和pushScene使用,但不能将过渡效果和popScene一起使用。3.3.2 Cocos2D支持的场景过渡效果Cocos2D支持多种场景过渡效果,以下是目前可以使用的过渡效果及其描述。(1)CCTransitionFade描述:场景在指定的时间内淡入淡出到一个指定的颜色。(2)CCTransitionFadeTR描述:从屏幕的左下角向上卷起瓦片(tiles),从而显示场景。它还有3个变化:CCTransitionFadeBL:从屏幕的右上角到左下角淡出场景的瓦片。CCTransitionFadeUp:从屏幕的底部到顶部淡出场景的瓦片。CCTransitionFadeDown:从屏幕的顶部到底部淡出场景的瓦片。(3)CCTransitionJumpZoom描述:现有场景跳动着变小,新场景跳动着变大。(4)CCTransitionMoveInL描述:旧的场景会移出,而新场景会从屏幕左侧移入。它还有3个变化:CCTransitionMoveInB:新场景从屏幕的底部移入。CCTransitionMoveInT:新场景从屏幕的上方移入。CCTransitionMoveInR:新场景从屏幕的右侧移入。(5)CCTransitionSceneOriented描述:将整个场景翻转过来。该效果还有6个变化:CCTransitionFlipX:场景横向翻转。CCTransitionFlipY:场景纵向翻转。CCTransitionFlipAngular:场景一半按横向,一半按纵向翻转。CCTransitionZoomFlipAngular:场景一半按横向,一半按纵向翻转,同时有一定缩放。CCTransitionZoomFlipX:场景纵向翻转,同时有一定缩放。CCTransitionZoomFlipY:场景横向翻转,同时有一定缩放。(6)CCTransitionPageTurn描述:翻动书页的过渡效果。(7)CCTransitionRotoZoom描述:当前场景旋转变小,新场景旋转变大。(8)CCTransitionShrinkGrow描述:当前场景缩小,新场景在其之上变大。(9)CCTransitionSlideInL描述:新场景从左边滑入。该效果还有另外3个变化:CCTransitionSlideInR:新场景从右边滑入。CCTransitionSlideInB:新场景从底部滑入。CCTransitionSlideInT:新场景从顶部滑入。(10)CCTransitionSplitCols描述:将当前场景切成竖条,上下移动显示新场景。该效果还有一个变化是CCTransition SplitRows,将当前场景切成横条,左右移动显示新场景。(11)CCTransitionTurnOffTiles描述:将当前场景分成方块,用分成方块的新场景随机地替换当前场景分出的方块。(12)CCTransitionProgressRadialCCW描述:新场景沿着径向逆时针显示。该效果还有一个变化是CCTransitionProgress RadialCW,让新的场景沿着径向顺时针显示。(13)CCTransitionProgressHorizontal描述:新场景沿着横向逐渐显示。该效果还有一个变化是CCTransitionProgressVertical,让新场景沿着纵向逐渐显示。该效果是Cocos2D v2.0新增场景过渡效果。(14)CCTransitionProgressInOut描述:新场景由内到外逐渐显示。该效果还有一个变化是CCTransitionProgressOutIn,让新场景由外到内逐渐显示。该效果是Cocos2D v2.0新增场景过渡效果。为了更好地了解每种效果的实际表现,可以打开Cocos2D模板的示例项目cocos2d-ios.xcodeproj,运行TransitionsTest,查看实际场景过渡效果。感兴趣的读者也可以仔细分析TransitionsTest.m,看看这些效果是如何具体实现的。


    最新回复(0)