Scene,Director,Layer和Sprite-创新互联
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));
14layer3->setStartColor(ccc3(255, 0, 0));
15 layer3->setEndColor(ccc3(255, 0, 255));
16 layer3->setStartOpacity(255);
17layer3->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进行变换。
希望能为需要的朋友解决问题,
如果还不能解决可以联系QQ897703027,email: hongjiandao@163.com
欢迎大家交流cocos2d-x,C++等各方面的知识,或者创业团队求收留,本人目前在做cocos2dx网游
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文题目:Scene,Director,Layer和Sprite-创新互联
浏览路径:http://pwwzsj.com/article/dijspi.html