cocos2d-x 自定义场景和场景跳转
来源:互联网 发布:2djgame 邀请码 淘宝 编辑:程序博客网 时间:2024/05/20 18:55
转自:http://blog.csdn.net/zhy_cheng/article/details/8279397
定义自己的场景,我们可以参考Cocos2d-x给我们生成的HelloWorld这个类。
- #pragma once
- #include "cocos2d.h"
- using namespace cocos2d;
- class MyLayer:public cocos2d::CCLayer
- {
- public:
- MyLayer(void);
- virtual ~MyLayer(void);
- static cocos2d::CCScene* scene();
- virtual bool init();
- CREATE_FUNC(MyLayer);
- };
- #pragma once
- #include "cocos2d.h"
- using namespace cocos2d;
- class MyLayer:public cocos2d::CCLayer
- {
- public:
- MyLayer(void);
- virtual ~MyLayer(void);
- static cocos2d::CCScene* scene();
- virtual bool init();
- CREATE_FUNC(MyLayer);
- };
上面是我自定义布景的MyLayer类,通过这个布景生成场景。这个类要继承自cocos2d::CCLayer,这是一个布景类,构造函数和析构函数都是编译器自动声称的,覆盖父类的init方法。定义一个静态方法,将布景变为场景。
下面看看init函数:
- bool MyLayer::init()
- {
- bool ret=false;
- do
- {
- CC_BREAK_IF(!CCLayer::init());
- CCSprite *lyl=CCSprite::create("lyl.png");
- lyl->setPosition(ccp(240,160));
- addChild(lyl,0);
- ret=true;
- }while(0);
- return ret;
- }
- bool MyLayer::init()
- {
- bool ret=false;
- do
- {
- CC_BREAK_IF(!CCLayer::init());
- CCSprite *lyl=CCSprite::create("lyl.png");
- lyl->setPosition(ccp(240,160));
- addChild(lyl,0);
- ret=true;
- }while(0);
- return ret;
- }
首先调用父类的init方法,然后我添加一个精灵,作为背景,呵呵,是一个美女哦。
在这个类的
- cocos2d::CCScene* MyLayer::scene()
- {
- CCScene *scene=NULL;
- do
- {
- scene=CCScene::create();
- CC_BREAK_IF(!scene);
- MyLayer *my=MyLayer::create();//需要定义CREATE_FUNC(MyLayer)宏
- CC_BREAK_IF(!my);
- scene->addChild(my);
- }while(0);
- return scene;
- }
- cocos2d::CCScene* MyLayer::scene()
- {
- CCScene *scene=NULL;
- do
- {
- scene=CCScene::create();
- CC_BREAK_IF(!scene);
- MyLayer *my=MyLayer::create();//需要定义CREATE_FUNC(MyLayer)宏
- CC_BREAK_IF(!my);
- scene->addChild(my);
- }while(0);
- return scene;
- }
生成一个场景,将该层加入场景中,注意,只有在头文件中定义了
- CREATE_FUNC(MyLayer);
- CREATE_FUNC(MyLayer);
这个宏之后,才有create函数。
这样,我的这个场景就定义好了。
在HelloWorld布景类中,加一个菜单,点击就进入这个布景。
- void HelloWorld::Go(CCObject *p)
- {
- CCScene *s=MyLayer::scene();
- CCDirector::sharedDirector()->replaceScene(s);
- }
- void HelloWorld::Go(CCObject *p)
- {
- CCScene *s=MyLayer::scene();
- CCDirector::sharedDirector()->replaceScene(s);
- }
场景的跳转使用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);//按列切
这里我就只以一个特效为例子来说明,代码如下:
- void HelloWorld::Go(CCObject *p)
- {
- CCScene *s=MyLayer::scene();
- CCDirector::sharedDirector()->replaceScene(CCTransitionJumpZoom::create(3, s));
- }
- void HelloWorld::Go(CCObject *p)
- {
- CCScene *s=MyLayer::scene();
- CCDirector::sharedDirector()->replaceScene(CCTransitionJumpZoom::create(3, s));
- }
效果如下:
跳跃式,本场景先会缩小到没有,然后下一个场景跳跃进来
第一个场景:
第一个场景缩小,跳走
第二个场景跳进来
完全展示第二个场景
呵呵,很萌,很漂亮吧。
- cocos2d-x 自定义场景和场景跳转
- cocos2d-x 自定义场景和场景跳转
- 【Cocos2d-x游戏引擎开发笔记(10)】自定义场景和场景跳转
- 【Cocos2d-x游戏引擎开发笔记(10)】自定义场景和场景跳转
- Cocos2d-x 3.0-Director和场景跳转
- 自定义场景和场景跳转
- cocos2d-x 自定义一个场景
- Cocos2d-x 的onEnter() 和 onEnterTransitionDidFinish() 场景延时跳转
- Cocos2d-x 的onEnter() 和 onEnterTransitionDidFinish() 场景延时跳转
- cocos2d-x 3.2 |如何实现场景跳转
- cocos2d-x 自定义的场景转换
- Cocos2d-x UIView和Coco2d-x场景之间的相互跳转切换
- cocos2d-x的场景
- cocos2d-x 场景震动
- cocos2d-x 场景切换
- cocos2d-x 更换场景
- cocos2d-X 场景Scene
- cocos2d-x 场景切换
- Ext JS百强应用:Form验证、表单验证、表单错误提示信息位置 --第4强
- cocos2d-x 定时器 schedule
- UIScrollView的属性总结
- Cocos2d-x CCProgressTimer实现DotA的技能冷却效果
- linux vsftpd 配置部署
- cocos2d-x 自定义场景和场景跳转
- JS中showModalDialog 详细使用
- Configure AIF service on Dynamics AX step by step
- SQL Join的一些总结[转载]
- Cocos2d-x 粒子系统----实现下雪效果
- 节点事件相应
- poj2060 Taxi Cab Scheme
- 6月7日,福建省厦门市一公交车在行驶过程中突然起火
- Linux2.6 内核进程调度分析 .