cocos2d-x中的导演、场景、层和精灵

 

场景(Scenes)

场景在cocos2d-x中是CCScene类实现的,是应用程序流中独立的一部分。一个cocos2dx应用程序可以有许多场景,但是在某一时刻,只有一个场景在运行。

比如,你有一个游戏,有以下场景:介绍、菜单、关卡1,过渡动画1,关卡2,胜利动画,失败动画,比分。设计者可以把每个场景当成一个独立的应用程序来设计,最后用一些少量的胶水代码,讲这些场景连接起来,形成一个完整的游戏。比如,介绍场景结束之后应该进入菜单场景,关卡1结束之后应该进入过渡动画1场景等等。场景切换流程可以设计如下图:

 

一个cocos2d场景对象由一个或者多个CCNode对象,加入到场景对象作为它的儿子组成。CCNode的子类,比如CCLayer和CCSprite,提供了场景的现实和行为。一般来说,程序员实现自己的CCLayer的一个子类,然后加入到一个空的场景对象中,在子类中实现你其他的图像显示和其他的游戏对象比如CCNode,再将这些游戏对象加入到你的自定义CCLayer的子类对象中。

因为场景是CCNode的子类,所以程序员可以可以通过CCAction来移动场景。

另外还有一系列的过渡场景类(CCTransitionScene)来实现场景切换时的效果,比如旧场景淡入,新场景淡出等等。


导演

导演对象时一个共享(单例)对象,负责场景之间的切换工作。它知道目前是哪个场景在执行,允许程序员通过它的接口,用新的场景替换旧的场景,或者压入一个新的场景到场景栈。当一个新的场景被压入到场景栈后,导演暂停旧的场景,但是旧的场景依旧保存在内存。如果将来程序员将新的栈弹出,旧的场景会从暂停的状态中恢复过来。

导演对象也负责初始化OpenGL ES。


层是CCNode子类,特别的功能是它能出来触摸消息。层可以是透明,也可以是不透明,甚至可以是半透明,让玩家透过半透明的层看那些后面的层。CCLayer在游戏的表现和行为上有非常重大的作用,所以程序员经常在CCLayer的子类中,实现大量的游戏需要的逻辑代码。

CCLayer可以处理用户触摸屏幕事件,只要重载相应的触摸事件处理函数,CCLayer就能反应用户的交互。触摸事件会发散到一个场景中的所有层,从前到后,知道有层捕获并接受这个事件为止。

复杂的程序需要程序员从CCLayer继承,实现自定义的层。cocos2dx提供了几个预定义的层,比如CCMenu(一个简单的menu层),CCColorLayer(一个带有颜色的层),CCLayerMultiplex(复合层,能让多个层混合在一起,当一个被激活时,其他无效)

层可以包含其他CCNode对象,比如CCSpite,CCLabel甚至可以使其他层对象。层也和场景一样都是CCNode的子类,所以它也可以定义动作。


复合层例子:

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);
效果如下:

精灵


精灵和定义其他引擎的精灵类似,精灵是一个2D图片,它能被移动,旋转,缩放,动画等和其他转换格式。精灵由精灵类CCSprite实现,精灵也可以有儿子对象,这些儿子对象,会随着父对象一起,被处理。



 

转载于:https://www.cnblogs.com/new0801/p/6177195.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值