现在的位置: 首页 > 综合 > 正文

cocos2d-x 学习点滴(5) Scene,Director, Layer 和 Sprite

2012年03月03日 ⁄ 综合 ⁄ 共 2032字 ⁄ 字号 评论关闭

Scene:

       在应用程序中,scene是相对独立的一块,在很多其他的引擎中,也把它称之为“画布”或者“舞台”。

       在cocos2d-x中,一个应用可以有多个scene,但任何时刻只能有一个是acitve的。一个CCScene由多个CCNode组成,一般是包含若干个CCLayer,而CCLayer又包含多个CCSprite。需要注意的是,CCScene,CCLayer和CCSprite都继承了CCNode,只不过后者还有其他的父类,使用多继承进行实现。可以得知cocos2d-x的可视化数据组织就是一棵场景树,只不过其中的有些中间节点被赋予了额外的逻辑(比如CCScene和CClayer)

       由于Scene是CCNode的子类,所以可以进行手动或者使用Actions进行变换。

       有一族特殊的scene叫CCTransitionScene,从CCScene派生而来,可以实现场景切换特效,比如褪色,翻页等效果

Director:

       Director是一个共享的单例对象,用来控制场景Scene之间的切换。Director知道当前Active的Scene。可以通过Director在场景栈的栈顶push一个新的scene来进行场景切换。将之前的Scene B压栈,push
Scene A,但并不从内存中销毁Scene B。如果将栈顶Scene A弹出,则会切换到Scene B,而且状态也恢复到之前压栈的状态。

      Director 还负责OpenGL ES 的初始化。

Layer:

        Layer是一种可以处理触摸事件的CCNode,可以在代码中看它除了额外继承CCNode之外,还继承了CCTouchDelegate。CCLayer知道如何绘制自己,并且可以半透,让玩家看到其他的Layer。CCLayer在定义游戏的外观和行为时非常有用,所以你应该花大量的编码时间来开发自己所需要的CCLayer子类。

        CCLayer可以在ccTouchBegan, ccTouchMoved, ccTouchEnded和ccTouchCancelled中处理相应的事件,而且在场景中的所有Layer都会收到这些事件,直到某个Layer处理了为止。

         除了可以开发自己所需要的CCLayer子类之外,cocos2d-x还提供了几种实现好的Layer,比如CCMenu,CCColorLayer和CCLayerMultiplex等。

         CCLayer可以包含任何CCNode的子类,包括CCSprite,CCLabels乃至其他的CCLayer子类。CCLayer也可以手动或者使用Actions进行变换。 

         以下是使用一种渐变Layer的示例:

 1    CCLayerGradient* layer1 = CCLayerGradient::create(ccc4(255, 0, 0, 255), ccc4(255, 0, 255, 255));
 2    layer1->setContentSize(CCSizeMake(80, 80));
 3    layer1->setPosition(ccp(50,50));
 4    addChild(layer1);
 5
 6    CCLayerGradient* layer2 = CCLayerGradient::create(ccc4(0, 0, 0, 127), ccc4(255, 255, 255, 127));
 7    layer2->setContentSize(CCSizeMake(80, 80));
 8    layer2->setPosition(ccp(100,90));
 9    addChild(layer2);
10
11    CCLayerGradient* layer3 = CCLayerGradient::create();
12    layer3->setContentSize(CCSizeMake(80, 80));
13    layer3->setPosition(ccp(150,140));
14    layer3->setStartColor(ccc3(255, 0, 0));
15    layer3->setEndColor(ccc3(255, 0, 255));
16    layer3->setStartOpacity(255);
17    layer3->setEndOpacity(255);
18    ccBlendFunc blend;
19    blend.src = GL_SRC_ALPHA;
20    blend.dst = GL_ONE_MINUS_SRC_ALPHA;
21    layer3->setBlendFunc(blend);
22    addChild(layer3);

Sprite:

          Sprite的概念和其他的2D引擎是差不多的,就是一个2D的图像,可以旋转平移缩放。

          Sprite可以包含其他的Sprite作为子节点,当父节点被变换时,子节点会一起被变换。

          Sprite可以手动或者使用Actions进行变换。

 

抱歉!评论已关闭.