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

自定义场景类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);//按列切


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值