文档章节

【Cocos2d-x-基础概念】Director Scene Layer and Sprite

王选易
 王选易
发布于 2013/05/18 00:11
字数 1121
阅读 6.6K
收藏 5

#Director Scene Layer and Sprite

###Scenes

scene(由CCScene类实现)多多少少是一个相对独立的app工作流。有些人把它称为“screens”或者“stages”。你的app可以由多个scene,但一次只能有一个在前台工作

例如,你可以有一个拥有以下场景的游戏:介绍,菜单,第一关,过场动画,第二关,获胜的过场动画,失败的过场动画,排行榜,你可以把其中的,每一个场景可以想成一个独立的应用,它们之间可以用一些胶水代码连接在一块。其流程图如下:

在此输入图片描述

cocos2d中的CCScene类由一个或多个CCNode组成,这些CCNode以children的形式被加到scene中。CCNode的子类,如CCLayer和CCSprite,使这个场景有了它的外观和行为,一个典型的用法是:你把屏幕当成CCLayer的子类来实现,然后把它们添加到刚刚实例化的CCScene上,然后,你把其他图形游戏对象(通常是CCSprite)当做CCNodes,头后再把它们加到刚才的CCLayer上

由于CCScene是CCNode的子类,它们可以用CCAction手动转换。但不推荐这么做。

对于场景转换,cocos2d提供了一种CCScene专门处理场景转换,叫transitions(由CCTransitionScene类实现)。它们提供了一些很炫的效果(如渐隐),用起来也很方便。

###Director

CCDirectior是一个单件(singleton),它用来指导各个场景之间的切换,它知道当前在运行的Scene是哪一个并且允许你通过替换掉当前的scene来改变scene或者是将一个新scene压栈。当你经一个新scene压栈时,CCDirector暂停了之前的scene但是把它保留在内存中,之后,当你将刚才的scene出栈时,刚刚被暂停的栈恢复了所有内容。

CCDirector还负责初始化openglES

###Layers

CCLayer是一个可以处理触摸事件(touch event)的CCNode,Layers有draw的方法,并且可以是半透明的,允许玩家看见它们之后的其它层,CCLayer在定义你游戏的外观和行为上是很有用的,所以你应该会在构建一个CCLayer的子类上花费相当多的事件

image02

CCLayer可以让你定义一个触摸事件的handler,通过实现方法来处理各种事件(ccTouchBegan, ccTouchMoved, ccTouchEnded, or ccTouchCancelled),CCLayer能够反馈玩家的交互,这些touch event会传播到一个scene上所有的Layer上去,直到某个Layer捕捉到了这个event并且处理了它。

复杂的游戏程序需要你去定义自己定制的CCLayer子类,但cocos2d也自己内置了一些很有用的CCLayer,包括CCMenu(a simple menu layer), CCColorLayer (背景是某种颜色), and CCLayerMultiplex .

Layer可以把CCNode当成自己的children,(包括CCSprite, CCLabel, CCLayer etc.)它们可以通过CCAction类进行转换(包括移动或动画之类的)。

<!-- lang: cpp -->

     CCLayerGradient* layer1 = CCLayerGradient::create(ccc4(255, 0, 0, 255), ccc4(255, 0, 255, 255));
 layer1->setContentSize(CCSizeMake(80, 80));
 layer1->setPosition(ccp(50,50));
 addChild(layer1);

 CCLayerGradient* layer2 = CCLayerGradient::create(ccc4(0, 0, 0, 127), ccc4(255, 255, 255, 127));
 layer2->setContentSize(CCSizeMake(80, 80));
 layer2->setPosition(ccp(100,90));
 addChild(layer2);

CCLayerGradient* layer3 = CCLayerGradient::create();
layer3->setContentSize(CCSizeMake(80, 80));
layer3->setPosition(ccp(150,140));
layer3->setStartColor(ccc3(255, 0, 0));
layer3->setEndColor(ccc3(255, 0, 255));
layer3->setStartOpacity(255);
layer3->setEndOpacity(255);
ccBlendFunc blend;
blend.src = GL_SRC_ALPHA;
blend.dst = GL_ONE_MINUS_SRC_ALPHA;
layer3->setBlendFunc(blend);
addChild(layer3);

在此输入图片描述

###Sprites

cocos2d中的CCSprite和其他游戏引擎中的Sprite是一样的,它能一同,旋转,变换大小,播放动画并进行其他各种变换

Sprite也可以有自己的children,当parent的Sprite进行某种变化时,它的所有children也经历相同的变化。

此文章由此翻译,欢迎转载

© 著作权归作者所有

王选易

王选易

粉丝 98
博文 20
码字总数 20066
作品 3
南京
程序员
私信 提问
cocos2d-x一些核心概念介绍

Cocos2d-x中有很多概念,这些概念很多来源于动画、动漫和电影等行业,例如:导演、场景和层等概念,当然也有些有传统的游戏的概念。Cocos2d-x中核心概念:导演, 场景,层,节点,精灵,菜单...

技术小阿哥
2017/11/27
0
0
cocos2d-x项目101次相遇: Scenes , Director, Layers, Sprites

cocos2d-x 101次相遇 / 目录 1 安装和环境搭建 -xcode 2 Scenes , Director, Layers, Sprites 3 建立图片菜单 4 在HelloWorld上--建立新场景 5 增加一个精灵sprite 5.1 缩小sprite并使...

中游学院
2014/04/30
0
0
Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现

HelloWorld场景就是游戏中的主菜单场景。HelloWorld.h文件代码如下: [html] view plaincopy #define HELLOWORLDSCENEH #include "cocos2d.h" #include "SimpleAudioEngine.h" ① #include "......

智捷课堂
2014/08/05
128
0
Cocos2d-x开发实例介绍特效演示

下面我们通过一个实例介绍几个特效的使用,这个实例下图所示,下图是一个操作菜单场景,选择菜单可以进入到下图动作场景,在下图动作场景中点击Go按钮可以执行我们选择的特性动作,点击Back按...

智捷课堂
2014/07/13
96
0
Cocos2d-x开发实例介绍帧动画使用

下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画。 下面我们再看看具体的程序代码,首...

智捷课堂
2014/07/15
93
0

没有更多内容

加载失败,请刷新页面

加载更多

序列化、反序列化和transient关键字的作用

引言 序列化:将一个对象转换成一串二进制表示的字节数组,通过保存或转移这些字节数据来达到持久化的目的。 反序列化:将字节数组重新构造成对象。 将 Java 对象序列化为二进制文件的 Java...

潦草的犀牛
29分钟前
39
0
聊聊artemis的maxDeliveryAttempts

序 本文主要研究一下artemis的maxDeliveryAttempts maxDeliveryAttempts activemq-artemis-2.11.0/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSe......

go4it
46分钟前
37
0
heroku - 如何查看所有日志

我在heroku上有一个小应用程序。 每当我想看日志时,我都会去命令行做 heroku logs 这只能让我看到大约100行。 有没有办法在heroku上查看我们的应用程序的完整日志? #1楼 对于雪松堆栈,请...

javail
53分钟前
37
0
Spring AOP 创建增强类

AOP联盟为增强定义了org.aopalliance.aop.Advice接口,Spring支持5种类型的增强: 1)前置增强:org.springframework.aop.BeforeAdvice 代表前置增强,因为Spring 只支持方法级的增强,所有M...

onedotdot
56分钟前
41
0
将.apply()与'new'运算符配合使用。 这可能吗?

在JavaScript中,我想创建一个对象实例(通过new运算符),但是将任意数量的参数传递给构造函数。 这可能吗? 我想做的是这样的(但是下面的代码不起作用): function Something(){ //...

技术盛宴
今天
74
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部