【Cocos2D-X游戏开发笔记2】自定义场景及场景切换效果

来源:互联网 发布:手机图片分类软件 编辑:程序博客网 时间:2024/05/22 05:27

自定义场景类MyGameLayer,代码如下:

MyGameLayer.h如下

#ifndef __MYGAMElAYER_SCENE_H__#define __MYGAMElAYER_SCENE_H__#pragma once#include "cocos2d.h"//使用cocos2d命名空间  USING_NS_CC; class MyGameLayer :public cocos2d::CCLayer{public:MyGameLayer(void);virtual ~MyGameLayer(void);static cocos2d::CCScene* scene();  virtual bool init(); CREATE_FUNC(MyGameLayer);};#endif // __MYGAMElAYER_SCENE_H__

MyGameLayer.cpp如下

#include "MyGameLayer.h"MyGameLayer::MyGameLayer(void){}MyGameLayer::~MyGameLayer(void){}//创建场景cocos2d::CCScene* MyGameLayer::scene(){CCScene *scene = NULL;do{scene = CCScene::create();CC_BREAK_IF(!scene);  MyGameLayer *gLayer = MyGameLayer::create();//需要定义CREATE_FUNC(MyGameLayer)宏CC_BREAK_IF(!gLayer); scene->addChild(gLayer);}while(0);return scene;}bool MyGameLayer::init(){bool ret =false;do{CC_BREAK_IF(!CCLayer::init());CCSprite *s = CCSprite::create("bg.png");s->setPosition(ccp(240,160));this->addChild(s,0);ret = true;}while(0);return ret;}

如何切换到自定义的MyGameLayer?

HelloCpp工程中做如下修改:

1)HelloWorldScene.h引入头文件

#include "MyGameLayer.h"

2)修改HelloWorld::init,创建一个菜单,点击菜单后切换到自定义的MyGameLayer

bool HelloWorld::init(){    bool bRet = false;    do     {        CC_BREAK_IF(! CCLayer::init());//创建开始菜单项CCMenuItemImage *goNext = CCMenuItemImage::create("start1.png","start1.png",              this,menu_selector(HelloWorld::goNextScene));CCSize size = CCDirector::sharedDirector()->getWinSize();//创建菜单 CCMenu* pMenu = CCMenu::create(goNext, NULL); pMenu->setPosition(ccp(size.width/2,size.height/2));this->addChild(pMenu, 1);CCLog("after init");        bRet = true;    } while (0);    return bRet;}
void HelloWorld::goNextScene(CCObject* pSender){CCLog("goNextScene");//跳转到游戏场景中//CCScene *gScene = MyGameLayer::scene();CCScene *s = MyGameLayer::scene();//CCDirector::sharedDirector()->replaceScene(s);//跳跃式,本场景先会缩小,新场景跳跃进来//CCDirector::sharedDirector()->replaceScene(CCTransitionJumpZoom::transitionWithDuration(3, s));  //依次测试其它切换效果//CCDirector::sharedDirector()->replaceScene(CCTransitionFade::transitionWithDuration(3, s));//CCDirector::sharedDirector()->replaceScene(CCTransitionFlipY::transitionWithDuration(3, s,kOrientationRightOver));//CCDirector::sharedDirector()->replaceScene(CCTransitionZoomFlipAngular::transitionWithDuration(3, s,kOrientationRightOver));CCDirector::sharedDirector()->replaceScene(CCTransitionTurnOffTiles::transitionWithDuration(3, s));}

其它切换效果有:

CCTransitionJumpZoom::transitionWithDuration(t, s);//跳跃式,原场景先会缩小,新场景跳跃进来
CCTransitionFade::transitionWithDuration(t, s);//淡出淡入,原场景淡出,新场景淡入
CCTransitionFade::transitionWithDuration(t, s, ccRED);//第三个参数就是淡出淡入的颜色,默认是黑色
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);//新场景从下移入推出原场景
CCTransitionCrossFade::transitionWithDuration(t,s);//淡出淡入交叉,同时进行

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);//按列切