《Cocos2d学习之路》七、场景切换效果TransitionScene

《Cocos2d学习之路》七、场景切换效果TransitionScene,第1张

概述转载请说明出处:http://blog.csdn.net/lsmfeixiang/article/details/43411919 github地址:https://github.com/teffy/cocos2dx 这几天接着看了一下场景切换效果TransitionScene,而cocos也在系统中提供了很多种不同的切换效果,那么我们先看一下TransitionScene的类继承关系图: 每一

转载请说明出处:http://www.jb51.cc/article/p-sirftvig-bas.html

github地址:https://github.com/teffy/cocos2dx


这几天接着看了一下场景切换的效果TransitionScene,而cocos也在系统中提供了很多种不同的切换效果,那么我们先看一下TransitionScene的类继承关系图:


每一个类在cocos2d的官网文档中有说明

而且在官方demo的cpp-test中也有demo,我也跟着写了一遍

首先是要理解一下一些宏定义

#define STRINGIFY(x) #x#define TRANS(__classname__){\//根据传入的类名构造一个结构体,结构体内有一个function和一个name,类似于java中XXX.class经过反射可以拿到很多东西[](float t,Scene* s){ return __classname__::create(t,s);},\STRINGIFY(__classname__),\}struct  Transitions{//结构体	std::function<TransitionScene*(float t,Scene* s)> function;	const char* name;}Transitions[] = {//结构体数组,用来保存定义的类的create方法和name	TRANS(MTransitionCrossFade),TRANS(MTransitionFade),TRANS(MTransitionFadeTR),TRANS(MTransitionFadeBL),TRANS(MTransitionFadeDown),TRANS(MTransitionFadeUp),TRANS(MTransitionJumpZoom),TRANS(MTransitionFlipAngular_DOWN),TRANS(MTransitionFlipAngular_left),TRANS(MTransitionFlipAngular_RIGHT),TRANS(MTransitionFlipAngular_UP),TRANS(MTransitionFlipX_DOWN),TRANS(MTransitionFlipX_left),TRANS(MTransitionFlipX_RIGHT),TRANS(MTransitionFlipX_UP),TRANS(MTransitionFlipY_DOWN),TRANS(MTransitionFlipY_left),TRANS(MTransitionFlipY_RIGHT),TRANS(MTransitionFlipY_UP),TRANS(MTransitionZoomFlipAngular),TRANS(MTransitionZoomFlipX_DOWN),TRANS(MTransitionZoomFlipX_left),TRANS(MTransitionZoomFlipX_RIGHT),TRANS(MTransitionZoomFlipX_UP),TRANS(MTransitionZoomFlipY_DOWN),TRANS(MTransitionZoomFlipY_left),TRANS(MTransitionZoomFlipY_RIGHT),TRANS(MTransitionZoomFlipY_UP),TRANS(MTransitionShrinkGrow),TRANS(MTransitionSlIDeInL),TRANS(MTransitionSlIDeInB),TRANS(MTransitionSlIDeInR),TRANS(MTransitionSplitCols),TRANS(MTransitionSplitRows),TRANS(MTransitionTurnOffTiles),};#define MAX_Transition_COUNT (sizeof(Transitions)/sizeof(Transitions[0]))
TransitionScene* createTranstion(int _index,float t,Scene* s){	//Director::getInstance()->setDepthTest(false);	return Transitions[_index].function(t,s);}
然后就是每一个切换效果的类,例举一个
class MTransitionTurnOffTiles : TransitionTurnOffTiles{public:	static TransitionScene* create(float duration,Scene* scene){		return TransitionTurnOffTiles::create(duration,scene);	}};
为了可以来回切换着看这些效果,通过向MainScene中添加不同的layer,每一个layer中有三个按钮,点击按钮的时候,然后构造一个切换效果Scene,进行切换场景,具体看code
LayerOne::LayerOne(){	init();}LayerOne::~LayerOne(){}bool LayerOne::init(){	if (!Layer::init()) {		return false;	}	Size visibleSize = Director::getInstance()->getVisibleSize();	Vec2 origin = Director::getInstance()->getVisibleOrigin();	MenuItemImage* restart = MenuItemImage::create("res/r1.png","res/r2.png",CC_CALLBACK_1(LayerOne::menuRestartCallback,this));	restart->setposition(Vec2(visibleSize.wIDth / 2,restart->getContentSize().height));	MenuItemImage* back = MenuItemImage::create("res/b1.png","res/b2.png",CC_CALLBACK_1(LayerOne::menuBackCallback,this));	back->setposition(Vec2(visibleSize.wIDth / 2 - restart->getContentSize().wIDth*1.5,back->getContentSize().height));	MenuItemImage* forward = MenuItemImage::create("res/f1.png","res/f2.png",CC_CALLBACK_1(LayerOne::menuForwardCallback,this));	forward->setposition(Vec2(visibleSize.wIDth / 2 + restart->getContentSize().wIDth*1.5,forward->getContentSize().height));	auto menu = Menu::create(restart,back,forward,NulL);	menu->setposition(Vec2::ZERO);	this->addChild(menu,1);	auto label = Label::createWithTTF("LayerOne","Fonts/Marker Felt.ttf",24);	label->setposition(Vec2(origin.x + visibleSize.wIDth / 2,origin.y + visibleSize.height - label->getContentSize().height));	this->addChild(label,1);	auto Transitionname = Label::createWithTTF(Transitions[Transition_index].name,24);	Transitionname->setposition(Vec2(origin.x + visibleSize.wIDth / 2,origin.y + visibleSize.height - Transitionname->getContentSize().height * 2));	this->addChild(Transitionname,1);	auto sprite = Sprite::create("res/background1.png");	sprite->setposition(Vec2(visibleSize.wIDth / 2 + origin.x,visibleSize.height / 2 + origin.y));	this->addChild(sprite,0);	return true;}voID LayerOne::menuRestartCallback(Ref* pSender){	auto go = MainScene::createScene();	Director::getInstance()->replaceScene(go);}voID LayerOne::menuBackCallback(Ref* pSender){	Transition_index--;	if (Transition_index < 0){		Transition_index += MAX_Transition_COUNT;	}	Scene* s = MainScene::createScene();	Layer* layer2 = new LayerTwo();	s->addChild(layer2);	auto scene = createTranstion(Transition_index,DURATION,s);	if (scene){		Director::getInstance()->replaceScene(scene);	}}voID LayerOne::menuForwardCallback(Ref* pSender){	Transition_index++;	Transition_index = Transition_index % MAX_Transition_COUNT;		Scene* s = MainScene::createScene();	Layer* layer2 = new LayerTwo();	s->addChild(layer2);	auto scene = createTranstion(Transition_index,s);	if (scene){		Director::getInstance()->replaceScene(scene);	}}
另外一个LayerTwo也是类似,只不过背景图片不同

win上可以运行,AndroID下,我刚开始不能run as,会报一些宏定义的错误,但是用命令编译过之后就好了

androID下效果图:



点击下载代码及资源

(后面发现少了点,我补充下)

总结

以上是内存溢出为你收集整理的《Cocos2d学习之路》七、场景切换效果TransitionScene全部内容,希望文章能够帮你解决《Cocos2d学习之路》七、场景切换效果TransitionScene所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1037419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存