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

简介: 本节书摘来自华章计算机《Cocos2D权威指南》一书中的第3章,第3.3节,作者:王寒,屈光辉,周雪彬著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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静态方法来创建。

image

示例代码如下:

+(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,看看这些效果是如何具体实现的。

相关文章
|
存储 数据可视化 数据管理
基于阿里云服务的数据平台架构实践
本文主要介绍基于阿里云大数据组件服务,对企业进行大数据平台建设的架构实践。
2047 2
|
安全 算法 API
支付宝支付加密规则梳理,写的太好了!
前言 支付是一个安全等级很高的场景,系统间交互的每一条数据的泄露都有可能造成及其大的损失。因此支付时系统间交互的每一
支付宝支付加密规则梳理,写的太好了!
|
9月前
|
存储 算法 Java
G1原理—5.G1垃圾回收过程之Mixed GC
本文介绍了G1的Mixed GC垃圾回收过程,包括并发标记算法详解、三色标记法如何解决错标漏标问题、SATB如何解决错标漏标问题、Mixed GC的过程、选择CollectSet的算法
G1原理—5.G1垃圾回收过程之Mixed GC
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
286 14
Linux 10 个“who”命令示例
|
JavaScript 前端开发
js教程——函数
js教程——函数
303 4
|
分布式计算 负载均衡 API
微服务架构设计原则与模式
【8月更文第29天】随着云计算和分布式计算的发展,微服务架构已成为构建大型复杂应用的一种流行方式。这种架构模式将单个应用程序分解成一组小型、独立的服务,每个服务运行在其自己的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。本文将探讨微服务架构的基本设计原则、常用模式以及如何有效地划分服务边界。
947 3
|
SQL 物联网 Serverless
Python集成EMQX
**EMQX**是一款实现了MQTT协议的高性能消息服务器软件,支持MQTT 3.1、3.1.1及5.0等协议,并兼容HTTP、QUIC和WebSocket等多种协议,确保广泛设备接入。作为全球下载量超千万的分布式物联网MQTT服务器,EMQX能支持单集群1亿设备连接,消息分发时延低于1毫秒,适用于构建关键业务的IoT平台与应用。EMQX具备SSL/TLS加密、双向认证、基于SQL的规则引擎等功能,并采用无主分布式架构确保高可用性和水平扩展性。提供开源版与企业版自托管方案及云服务选项,满足不同需求。通过Python SDK(如Paho-MQTT)可轻松集成,实现消息的发布与订阅。
415 0
|
数据采集 机器学习/深度学习 数据挖掘
使用Python进行数据预处理与清洗的最佳实践
本文探讨了Python在数据预处理和清洗中的关键作用。预处理包括数据收集、整合、探索、转换和标准化,而清洗则涉及缺失值、重复值、异常值的处理及数据格式转换。文中提供了使用pandas库进行数据读取、缺失值(如用平均值填充)和重复值处理、异常值检测(如IQR法则)以及数据转换(如min-max缩放)的代码示例。此外,还讲解了文本数据清洗的基本步骤,包括去除标点、转换为小写和停用词移除。整体上,文章旨在帮助读者掌握数据预处理和清洗的最佳实践,以提高数据分析的准确性和效率。
2100 2
|
JavaScript
Vue.js中使用作用域插槽实现自定义表格组件
Vue.js中使用作用域插槽实现自定义表格组件
257 1
|
NoSQL Linux C语言
GDB:强大的GNU调试器
GDB:强大的GNU调试器
349 0