Cocos2d-x场景切换我换换换!----之游戏开发《赵云要格斗》(12)

Cocos2d-x场景切换我换换换!----之游戏开发《赵云要格斗》(12),第1张

概述           这里是Evankaka的博客,欢迎大家前来讨论与交流~~~~~~        转载请注明出处http://www.voidcn.com/article/p-vmdfutrp-kh.html        本文主要讲讲用Cocos Studio制作的登录界面,来设计一个层类,然后根据这个登录界面的选择,跳转到不同的场景。其中,本文用到的界面可参看上篇Cocos2d-x使用Co

这里是Evankaka的博客,欢迎大家前来讨论与交流~~~~~~

转载请注明出处http://www.jb51.cc/article/p-vmdfutrp-kh.html

本文主要讲讲用Cocos Studio制作的登录界面,来设计一个层类,然后根据这个登录界面的选择,跳转到不同的场景。其中,本文用到的界面可参看上篇Cocos2d-x使用Cocos Studio制作界面并应用---之游戏开发《赵云要格斗》(11)

cocos2d-x版本:2.2.5

工程环境:windows7+VS2010

打开方式:将工程放在cocos2d-x安装目录下的project文件夹下用VS打开

(源码免费下载) 先来看看效果:



一、场景切换知识 1 一些常识

入口:AppDelegate

场景:Scene(由开发者自己实现各种各样的scene)

场景组件:Layer(主要提供组管理的机制)和各种Node(基本要素)

场景切换:Director很显然一个简单的游戏基本上只需要自己自己实现几个Scene,添加一些Layer和Node进来,再找个合适的地方用Director进行切换即可。


2.说明 runWithScene(CCScene* scene):启动游戏,并运行scene 场景。这个方法在主程序启动时第一次启动主场景时调用。(它在AppDelegate中应用到) replaceScene(CCScene* scene):直接使用传入的scene 替换当前场景来切换画面,当前场景将被释放。这是切换场景时最常用的方法。 pushScene(CCScene* scene):在不释放旧场景内存的情况下运行新场景,推进新场景相当于在当前可见的纸上再放一张纸,而之前的纸位置何持不变。适用情况: a.推进一个经常被用到的场景,例如游戏中的Setting场景。 b.当想要保留最初场景状态时,而不想保留和加载状态。例如在游戏过程中查看排行榜,推进排行榜场景时,游戏场景不会继续运行,会被暂停。 popScene:释放当前场景,再从代执行场景栈中d出栈顶的场景,并将其设置为当前运行场景。如果栈为空,则直接结束应用。与pushScene 成对使用,可以达到形如由主界面进入设置界面,然后回到主界面的效果。 由于每当在推进场景时,需要保证总是有足够的额外内存可供推进的场景使用,但这一点很难测试。建议要推进的场景都应该是轻巧的,只占用少量的内存,并且只d出自身,而不会推进其它场景
二、自定义登录界面

这里直接看代码了,自己把JsON文件换下,再把按钮名换下,就可以设置自己的游戏登录界面了

GameLogin.h

#ifndef __GameLogin_SCENE_H__#define __GameLogin_SCENE_H__#include "cocos2d.h"#include "cocos-ext.h"USING_NS_CC;USING_NS_CC_EXT;using namespace gui;//重点要记得,要不会出现error C2065: “SEL_touchEvent”: 未声明的标识符class GameLogin : public cocos2d::cclayer{public:    virtual bool init();      static cocos2d::CCScene* scene();    CREATE_FUNC(GameLogin);	//开始游戏按钮的回调事件	voID touchBeginbutton(cocos2d::CCObject* obj,gui::touchEventType type);	//设置游戏按钮的回调事件	voID touchSetnbutton(cocos2d::CCObject* obj,gui::touchEventType type);	//退出游戏按钮的回调事件	voID touchExitbutton(cocos2d::CCObject* obj,gui::touchEventType type);};#endif // __GameLogin_SCENE_H__

GameLogin.cpp

#include "GameLogin.h"#include "HelloWorldScene.h"//这是游戏界面的头文件CCScene* GameLogin::scene(){    CCScene *scene = CCScene::create();    GameLogin *layer = GameLogin::create();    scene->addChild(layer);    return scene;}bool GameLogin::init(){    if ( !cclayer::init() )    {        return false;    }        CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();	//加载cocos studio制作的界面	gui::touchGrouP* ul = gui::touchGroup::create(); 	gui::Layout* equipe_root =dynamic_cast<gui::Layout*>(GUIReader::shareReader()->WidgetFromJsonfile("MyLogin_1.ExportJson"));	ul->addWidget(equipe_root); 	this->addChild(ul,2);	//给开始按钮添加事件监听	gui::button *Btn_Begin = dynamic_cast<gui::button*>(equipe_root->getChildByname("Begin_Game"));//Begin_Game为在Cocos Studio中定义的按钮的名称	Btn_Begin->addtouchEventListener(this,toucheventselector(GameLogin::touchBeginbutton));	//给设置按钮添加事件监听	gui::button *Btn_Set = dynamic_cast<gui::button*>(equipe_root->getChildByname("Set_Game")); //Set_Game为在Cocos Studio中定义的按钮的名称	Btn_Set->addtouchEventListener(this,toucheventselector(GameLogin::touchSetnbutton));	//给开始按钮添加事件监听	gui::button *Btn_Exit = dynamic_cast<gui::button*>(equipe_root->getChildByname("Exit_Game")); //Exit_Game为在Cocos Studio中定义的按钮的名称	Btn_Exit->addtouchEventListener(this,toucheventselector(GameLogin::touchExitbutton));        return true;}voID GameLogin::touchBeginbutton(cocos2d::CCObject* obj,gui::touchEventType type){      if(type==gui::touchEventType::touch_EVENT_BEGAN)				CCDirector::sharedDirector()->replaceScene(HelloWorld::scene());//进入游戏主界面}//设置游戏按钮的回调事件voID GameLogin::touchSetnbutton(cocos2d::CCObject* obj,gui::touchEventType type){}//退出游戏按钮的回调事件voID GameLogin::touchExitbutton(cocos2d::CCObject* obj,gui::touchEventType type){	if(type==gui::touchEventType::touch_EVENT_BEGAN)   	CCDirector::sharedDirector()->end();}

很简单的一个类,以后还可以扩展~

三、更换场景和初始化界面 1 更改初始界面

打开AppDelegate.cpp或AppDelegate.h,添加头文件#include "GameLogin.h"

把原来CCScene *pScene = HelloWorld::scene();
改成 CCScene *pScene = GameLogin::scene();

记得在Cocos2d-x游戏暂停、继续游戏、重新开始界面的实现---之游戏开发《赵云要格斗》(10)里面我们不是定义了个Gamepause类么,里面有个回主界面的按钮,在这里记得把事件写上去了。

添加头文件#include "GameLogin.h"

修改函数

//回主界面voID  Gamepause::menulogin(CCObject* pSender){	CCDirector::sharedDirector()->replaceScene(GameLogin::scene());}
下面直接运行来看看哈


2 带效果的切换

GameLogin.cpp修改函数

voID GameLogin::touchBeginbutton(cocos2d::CCObject* obj,gui::touchEventType type){      if(type==gui::touchEventType::touch_EVENT_BEGAN)	  {	//	CCDirector::sharedDirector()->replaceScene(HelloWorld::scene());//进入游戏主界面		 // CCDirector::sharedDirector()->replaceScene(CCTransitionPageTurn::create(2,HelloWorld::scene(),false));//翻页进入游戏主界面		   CCDirector::sharedDirector()->replaceScene(CCTransitionTurnOffTiles::create(2,HelloWorld::scene()));//随机方格消失进入游戏主界面		       //  CCTransitionPageTurn			  //    作用:创建一个翻页的过渡动画			  //    参数1:过渡动作持续的时间			  //    参数2:切换的目标场景的对象			   //    参数3:是否逆向翻页		      // CCTransitionTurnOffTiles			  //    作用:创建一个随机方格消失的过渡动画			  //    参数1:过渡动作的持续时间			  //    参数2:切换的目标场景的对象	  }}
更多的场景切换效果:

[1]:CCTransitionCrossFade::create(时间,目标场景);

//慢慢淡化到另一场景

[2]:CCTransitionFade::create(时间,61); line-height:21px"> //本场景变暗消失后另一场景慢慢出现

[3]:CCTransitionFadeBL::create(时间,61); line-height:21px"> //本场景右上角到左下角方块消失到另一场景

[4]:CCTransitionFadeDown::create(时间,61); line-height:21px"> //本场景从上到下横条消失到另一场景

[5]:CCTransitionFadeTR::create(时间,61); line-height:21px"> //本场景左下角到右上角方块消失到另一场景

[6]:CCTransitionFadeUp::create(时间,61); line-height:21px"> //本场景从下到上横条消失到另一场景

[7]:CCTransitionFlipAngular::create(时间,目标场景,样式 );

//本场景翻转消失到另一场景(斜上方)

//样式(可以不写):

//kCCTransitionOrIEntationleftOver(左向右翻转)

//kCCTransitionOrIEntationRightOver(右向左翻转)

[8]:CCTransitionFlipX::create(时间,样式);

//本场景翻转消失到另一场景(X轴)

[9]:CCTransitionFlipY::create(时间,61); line-height:21px"> //本场景翻转消失到另一场景(Y轴)

//kCCTransitionOrIEntationUpOver(下向上翻转)

//kCCTransitionOrIEntationDownOver(上向下翻转)

[10]:CCTransitionJumpZoom::create(时间,61); line-height:21px"> //本场景跳动消失后另一场景跳动出现

[11]:CCTransitionMoveInB::create(时间,61); line-height:21px"> //另一场景由整体从下面出现

[12]:CCTransitionMoveInL::create(时间,61); line-height:21px"> //另一场景由整体从左面出现

[13]:CCTransitionMoveInT::create(时间,61); line-height:21px"> //另一场景由整体从上面出现

[14]:CCTransitionMoveInR::create(时间,61); line-height:21px"> //另一场景由整体从右面出现

[15]:CCTransitionPageTurn::create(时间,bool);

//翻页切换,bool为true是向前翻。

[16]:CCTransitionProgressHorizontal::create(时间,61); line-height:21px"> //本场景从左到右消失同时另一场景出现

[17]:CCTransitionProgressInOut::create(时间,61); line-height:21px"> //本场景从中间到四周消失同时另一场景出现

[18]:CCTransitionProgressOutIn::create(时间,61); line-height:21px"> //本场景从四周到中间消失同时另一场景出现

[19]:CCTransitionProgressRadialccw::create(时间,61); line-height:21px"> //本场景逆时针消失到另一场景

[20]:CCTransitionProgressRadialCW::create(时间,61); line-height:21px"> //本场景顺时针消失到另一场景

[21]:CCTransitionProgressvertical::create(时间,61); line-height:21px"> //本场景从上到下消失同时另一场景出现

[22]:CCTransitionRotoZoom::create(时间,61); line-height:21px"> //本场景旋转消失后另一场景旋转出现

[23]:CCTransitionShrinkGrow::create(时间,61); line-height:21px"> //本场景缩小切换到另一场景放大

[24]:CCTransitionSlIDeInB::create(时间,61); line-height:21px"> //本场景向上滑动到另一场景

[25]:CCTransitionSlIDeInL::create(时间,61); line-height:21px"> //本场景向右滑动到另一场景

[26]:CCTransitionSlIDeInR::create(时间,61); line-height:21px"> //本场景向左滑动到另一场景

[27]:CCTransitionSlIDeInT::create(时间,61); line-height:21px"> //本场景向下滑动到另一场景

[28]:CCTransitionSplitCols::create(时间,61); line-height:21px"> //本场景三矩形上下消失后另一场景三矩形上下出现

[29]:CCTransitionSplitRows::create(时间,61); line-height:21px"> //本场景三矩形左右消失后另一场景三矩形左右出现

[30]:CCTransitionTurnOffTiles::create(时间,61); line-height:21px"> //本场景小方块消失到另一场景

[31]:CCTransitionZoomFlipAngular::create(时间,61); line-height:21px"> [32]:CCTransitionZoomFlipX::create(时间,61); line-height:21px"> [33]:CCTransitionZoomFlipY::create(时间,61); line-height:21px"> //kCCTransitionOrIEntationDownOver(上向下翻转)




总结

以上是内存溢出为你收集整理的Cocos2d-x场景切换我换换换!----之游戏开发《赵云要格斗》(12)全部内容,希望文章能够帮你解决Cocos2d-x场景切换我换换换!----之游戏开发《赵云要格斗》(12)所遇到的程序开发问题。

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

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

原文地址: https://www.outofmemory.cn/web/1036111.html

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

发表评论

登录后才能评论

评论列表(0条)

保存