cocos2d-x开发记录:二,基本概念(导演,场景,层和精灵,场景切换,效果)...

四,Director Scene Layer和Sprite(导演,场景,层和精灵)

1.Scenes(场景)

一个场景 (用CCScene对象实现)相当于APP工作流的独立部分。一些人也喜欢叫做“屏幕”或“舞台”。你的App可以有许多屏幕,但在特定时间内只有一个是处于激活状态。 例如你的一个游戏中有这些场景:介绍,主菜单,关卡1,剧情动画1,关卡2,胜利过场动画,失败过场动画,高分屏。你认为这些场景可以作为一个单独的应用程序,该应用程序只需要很少的连接代码就可以跳到其他的场景。例如介绍场景完成后可能直接跳到主菜单场景,下面是一个假设的游戏流程图:

 

一个cocos2d CCScene是由一个或多个CCNodes组成, CCNodes还可以做为子类嵌套。CCNodes的子类如CCLayer和CCSprite会给定场景的外观和行为。通常你实现CCLayer的子类并添加到空白的CCScene实例中。然后实现你的其他图形和游戏对象把它们作为CCNodes 添加到CCLayer中。因为场景是CCNode的子类,

它们能被手动或使用CCActions来变换。场景的切换可以通过CCScene 的子类CCTransitionScene类来处理。这些允许你创建特定切换效果。比如渐入渐出等之类的场景切换效果。

2.Director(导演)

CCDirector是一个共享的单例对象,它提供场景之间的导航。它知道当前被激活的场景并允许你改变场景。当你把一个新场景放入栈中,CCDirector会暂停先前的场景,但还是会保留在内存中。当你中栈顶取出顶部的场景时,先前暂停的场景会回复它上一次的状态。CCDirector还负责初始化OpenGL ES。

3.Layers(层)

一个CCLayer是一个CCNode它知道如何处理触摸事件。层知道如何绘制它们自己并可能是半透明,允许玩家看到背后的其他层。CCLayers在定义你游戏的外观和行为上非常有用,因此你应该耗费大量时间在CCLayer子类的编写上。如下图所示:

 

CCLayer是定义你处理触摸事件的地方。通过实现一个方法来处理触摸事件(ccTouchBegan,ccTouchMoved,ccTouchEnded,ccTouchCancelled)并与玩家互动。这些触摸时间被传递到一个场景内的所有层中,由前向后,直到一些层捕获事件并接受它。而复杂的应用程序将要求你定义CCLayer的子类,cocos2d提供一些预定义的层。一些例子包括CCMenu(一个简单的菜单层),CCColorLayer(一个实体颜色层),CCLayerMultiplex(一个多样化的层,让你多种不同的子元素中,每次激活一个元素但关闭其他元素)。层可以包含任意的CCNode,如CCSprites,CCLabels或CCLayer他自己。因为层是CCNode的子类,它们能被手动或使用CCActions来变换。以下是CCLayerMultiplex的例子代码:

     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其实和其他游戏引擎的sprites类似。这是一个2D图像,可以移动,旋转,缩放,动画,并接受其他转换。当然精灵也能嵌套。它父类精灵被转换时,它的所有子元素也会被转换。同样精灵也是CCNode的子类,任何转换都适用于CCActions

 

五,场景切换

Cocos2d-x提供一个非常酷的功能,就是两个不同场景间的切换。擦拭,淡入淡出,缩放,分裂。它依赖于CocosNode 并类似于层,从技术上来讲场景过渡也是一个场景,它承前启后。相比用过Android源生的同学都知道,android也有这样的功能,但cocos2d-x的过渡效果更加强大。

1.创建过渡

他的时间单位为秒,应用场景转换的语法如下所示:

CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(0.5,newScene));

它提供一些过渡自定义参数,如FadeTransition有一个淡入淡出的颜色作为一个额外的参数如下代码所示:
static CCTransitionFade* create(float duration,CCScene* scene, const ccColor3B& color);
对于场景过渡它得心应手,下面是一个小例子:

CCScene *s = SecondPage::scene();

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

CCTransitionScene *transition = CCTransitionPageTurn::create(3.0f, s, false);

如果你运行上面的代码你将会有一个翻页的效果:

六,效果

1.导言

效果是一个特殊类型的action。它不是修改一些常用的属性,如透明度,位置,旋转,缩放。而是修改一个新的属性:grid。一个grid属性像一个矩阵,它是一个网络的线路,相互交叉,形成一系列的正方形或长方形。这些特殊的动作渲染于任何的CocosNode对象(Layer, Scene, Sprite等)到grid,并且你能通过改变它们的顶点来变换grid。下面有两种girds:tiled girds和非tiled grids。它们的区别是tiled girds是由于个体的tiles组成而非tiled grids由顶点组成。如下图所示:

 

下面是一个Ripple3D动作的例子,它使用是Grid3D(非tiled)grid:
 

下面是一个FadeOutTR 动作,它使用是TiledGrid3D(tiled)grid:
 

2.如何使用它们

任何其他的action,都是通过runAciton执行:

// Create an sprite

CCSprite* grossini = CCSprite::create("grossini.png");

grossini->runAction(CCLiquid::create(4, 20, ccg(10,10), 5));

 

液体类似的效果,它们接收gird参数。你可以通过增加网格的大小调整效果的质量。但它也意味着更少的FPS。这种效果是IntervalAction动作,因此你能对待其他动作一样处理:

// create a Lens3D action
CCActionInterval* lens = CCLens3D::create(ccp(240,160),240,ccg(15,10),8);

// create a Waved3D action
CCActionInterval* waves = CCWaves3D::create(18,80,ccg(15,10),10);

// create a sequence an repeat it forever
grossini->runAction(CCRepeatForever::create((CCSequence*)CCSequence::create(waves, lens, NULL ) ) );

以下是使用Grid3D (非tiled)的action,基于v2.1.0版本

Shaky3D  

Waves3D  

FlipX3D  

FlipY3D  

    

 

Lens3D  

Liquid  

Waves  

Twirl  

    

 

Ripple3D  

 

以下是使用TiledGrid3D(tiled)的action

ShakyTiles3D  

ShatteredTiles3D  

ShuffleTiles  

FadeOutTRTiles  

    

 

FadeOutBLTiles  

FadeOutUpTiles  

FadeOutDownTiles  

TurnOffTiles  

    

 

WavesTiles3D  

JumpTiles3D  

SplitRows  

SplitCols  

    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值