【Cocos2D-X 】初窥门径(2) 场景的切换及特效

本文介绍如何在Cocos2d-x中实现不同场景之间的切换,并提供了多种过渡效果的示例代码。包括淡入淡出、翻页、滑动等特效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上节的基础上,看看怎么实现场景的切换。

添加一个场景WelcomeScene

#include "WelcomeScene.h"
#include "GameScene.h"

using namespace cocos2d;

CCScene* WelcomeScene::scene()
{
	CCScene * scene = NULL;
	do
	{
		scene=CCScene::create();

		WelcomeScene* gameScene=WelcomeScene::create();
		scene->addChild(gameScene);


	}while(0);

	return scene;
}

bool WelcomeScene::init()
{
	this->setTouchEnabled(true);
	bool bRet = false;
	do
	{
		CCSprite* pMap = CCSprite::create("welcome_bg.png");
		CCSize size = CCDirector::sharedDirector()->getWinSize();
		pMap->setPosition(ccp(size.width/2, size.height/2));
		this->addChild(pMap, 0);

		CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
			"StartGameNormal.png",
			"StartGamePressed.png",
			this,
			menu_selector(WelcomeScene::menuStartCallback));
		CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
		pMenu->setPosition(size.width/2,size.height/2);
		this->addChild(pMenu, 1);
			
	}while(0);

	bRet=true;

	return bRet;
}


void WelcomeScene::menuStartCallback(CCObject* pSender)
{
	CCScene * scene=GameScene::scene();
	CCDirector::sharedDirector()->replaceScene(scene);
}
在menuStartCallback()中通过导演来切换场景。


使用特效:

CCDirector::sharedDirector()->replaceScene((CCTransitionSlideInR::create(1, scene)));


网上找的特效:

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




转载请注明出处:http://blog.youkuaiyun.com/Vestigge

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值