自定义场景和场景跳转

来源:互联网 发布:江宁区高新园网络问政 编辑:程序博客网 时间:2024/05/16 14:51

出处:http://blog.csdn.net/zhy_cheng/article/details/8279397

定义自己的场景,我们可以参考Cocos2d-x给我们生成的HelloWorld这个类。

  1. #pragma once  
  2. #include "cocos2d.h"  
  3. using namespace cocos2d;  
  4. class MyLayer:public cocos2d::CCLayer  
  5. {  
  6. public:  
  7.     MyLayer(void);  
  8.     virtual ~MyLayer(void);  
  9.     static cocos2d::CCScene* scene();  
  10.     virtual bool init();  
  11.     CREATE_FUNC(MyLayer);  
  12. };

上面是我自定义布景的MyLayer类,通过这个布景生成场景。这个类要继承自cocos2d::CCLayer,这是一个布景类,构造函数和析构函数都是编译器自动声称的,覆盖父类的init方法。定义一个静态方法,将布景变为场景。


下面看看init函数:

  1. bool MyLayer::init()  
  2.  {  
  3.      bool ret=false;  
  4.      do  
  5.      {  
  6.          CC_BREAK_IF(!CCLayer::init());  
  7.          CCSprite *lyl=CCSprite::create("lyl.png");  
  8.          lyl->setPosition(ccp(240,160));  
  9.          addChild(lyl,0);  
  10.          ret=true;  
  11.      }while(0);  
  12.   
  13.      return ret;  
  14.  }

首先调用父类的init方法,然后我添加一个精灵,作为背景,呵呵,是一个美女哦。


在这个类的 

  1. cocos2d::CCScene* MyLayer::scene()  
  2. {  
  3.     CCScene *scene=NULL;  
  4.     do  
  5.     {  
  6.         scene=CCScene::create();  
  7.         CC_BREAK_IF(!scene);  
  8.   
  9.         MyLayer *my=MyLayer::create();//需要定义CREATE_FUNC(MyLayer)宏  
  10.         CC_BREAK_IF(!my);  
  11.         scene->addChild(my);  
  12.   
  13.   
  14.   
  15.   
  16.     }while(0);  
  17.     return scene;  
  18. }

cop

生成一个场景,将该层加入场景中,注意,只有在头文件中定义了

CREATE_FUNC(MyLayer); 


这个宏之后,才有create函数。

这样,我的这个场景就定义好了。

在HelloWorld布景类中,加一个菜单,点击就进入这个布景。

  1. void HelloWorld::Go(CCObject *p)  
  2. {  
  3.     CCScene *s=MyLayer::scene();  
  4.     CCDirector::sharedDirector()->replaceScene(s);  
  5. } view plain cop  


场景的跳转使用replaceScene函数。另外场景跳转有很多特效,我来看看特效都有哪些:

小面的特效转自小满的博客:场景间切换效果,尊重原创。


一般此函数有两个参数,第一个是特效的切换时间,直接生成一个CCTime即可,例子中设定的时间是1.2s,对于很多场景的显示都很舒服,第二个是要进入的场景,有的会有第三个参数,会在下面介绍

2.test中的效果总结

CCTransitionJumpZoom::transitionWithDuration(t, s);//跳跃式,本场景先会缩小,然后跳跃进来

CCTransitionFade::transitionWithDuration(t, s);//淡出淡入,原场景淡出,新场景淡入

CCTransitionFade::transitionWithDuration(t, s, ccWHITE);//如果上一个的函数,带3个参数,则第三个参数就是淡出淡入的颜色

CCTransitionFlipX::transitionWithDuration(t, s, kOrientationLeftOver);//x轴左翻

CCTransitionFlipX::transitionWithDuration(t, s, kOrientationRightOver);//x轴右翻

CCTransitionFlipY::transitionWithDuration(t, s, kOrientationUpOver);//y轴上翻

CCTransitionFlipY::transitionWithDuration(t, s, kOrientationDownOver);//y轴下翻

CCTransitionFlipAngular::transitionWithDuration(t, s, kOrientationLeftOver);//有角度转的左翻

CCTransitionFlipAngular::transitionWithDuration(t, s, kOrientationRightOver);//有角度转的右翻

CCTransitionZoomFlipX::transitionWithDuration(t, s, kOrientationLeftOver);//带缩放效果x轴左翻

CCTransitionZoomFlipX::transitionWithDuration(t, s, kOrientationRightOver);//带缩放效果x轴右翻

CCTransitionZoomFlipY::transitionWithDuration(t, s, kOrientationUpOver);//带缩放效果y轴上翻

CCTransitionZoomFlipY::transitionWithDuration(t, s, kOrientationDownOver);//带缩放效果y轴下翻

CCTransitionZoomFlipAngular::transitionWithDuration(t, s, kOrientationLeftOver);//带缩放效果/有角度转的左翻

CCTransitionZoomFlipAngular::transitionWithDuration(t, s, kOrientationRightOver);//带缩放效果有角度转的右翻

CCTransitionShrinkGrow::transitionWithDuration(t, s);//交错换

CCTransitionRotoZoom::transitionWithDuration(t, s);//转角换

CCTransitionMoveInL::transitionWithDuration(t, s);//新场景从左移入覆盖

CCTransitionMoveInR::transitionWithDuration(t, s);//新场景从右移入覆盖

CCTransitionMoveInT::transitionWithDuration(t, s);//新场景从上移入覆盖

CCTransitionMoveInB::transitionWithDuration(t, s);//新场景从下移入覆盖

CCTransitionSlideInL::transitionWithDuration(t, s);//场景从左移入推出原场景

CCTransitionSlideInR::transitionWithDuration(t, s);//场景从右移入推出原场景

CCTransitionSlideInT::transitionWithDuration(t, s);//场景从上移入推出原场景

CCTransitionSlideInB::transitionWithDuration(t, s);//场景从下移入推出原场景

以下三个需要检测opengl版本是否支持CCConfiguration::sharedConfiguration()->getGlesVersion() <= GLES_VER_1_0如果为真则为不支持

CCTransitionCrossFade::transitionWithDuration(t,s);//淡出淡入交叉,同时进行

CCTransitionRadialCCW::transitionWithDuration(t,s);//时针切入

CCTransitionRadialCW::transitionWithDuration(t,s);//时针切入

以下两个需要先设置摄像机,使用CCDirector::sharedDirector()->setDepthTest(true);

CCTransitionPageTurn::transitionWithDuration(t, s, false);//翻页,前翻

CCTransitionPageTurn::transitionWithDuration(t, s, true);//翻页,后翻

CCTransitionFadeTR::transitionWithDuration(t, s);//向右上波浪

CCTransitionFadeBL::transitionWithDuration(t, s);//向左下波浪

CCTransitionFadeUp::transitionWithDuration(t, s);//向上百叶窗

CCTransitionFadeDown::transitionWithDuration(t, s);//向下百叶窗

CCTransitionTurnOffTiles::transitionWithDuration(t, s);//随机小方块

CCTransitionSplitRows::transitionWithDuration(t, s);//按行切

CCTransitionSplitCols::transitionWithDuration(t, s);//按列切

这里我就只以一个特效为例子来说明,代码如下:

  1. void HelloWorld::Go(CCObject *p)  
  2. {  
  3.     CCScene *s=MyLayer::scene();  
  4.     CCDirector::sharedDirector()->replaceScene(CCTransitionJumpZoom::transitionWithDuration(3, s));  
  5. } view plain copy  


效果如下:
跳跃式,本场景先会缩小到没有,然后下一个场景跳跃进来

第一个场景:


第一个场景缩小,跳走

阅读全文
0 0
原创粉丝点击