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

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

       转载请注明出处http://blog.csdn.net/evankaka/article/details/42883881

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

cocos2d-x版本:2.2.5

工程环境:windows7+VS2010

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

先来看看效果:

一、自定义登录界面

这里直接看代码了,自己把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

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

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

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

2.说明

runWithScene(CCScene* scene):启动游戏,并运行scene 场景。这个方法在主程序启动时第一次启动主场景时调用。(它在AppDelegate中应用到)

replaceScene(CCScene* scene):直接使用传入的scene 替换当前场景来切换画面,当前场景将被释放。这是切换场景时

最常用的方法。

pushScene(CCScene* scene):在不释放旧场景内存的情况下运行新场景,推进新场景相当于在当前可见的纸上再放一张纸,而之前的纸位置何持不变。适用情况:

1.推进一个经常被用到的场景,例如游戏中的Setting场景。

2.当想要保留最初场景状态时,而不想保留和加载状态。例如在游戏过程中查看排行榜,推进排行榜场景时,游戏场景不会继续运行,会被暂停。

popScene:释放当前场景,再从代执行场景栈中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,则直接结束应用。与pushScene 成对使用,可以达到形如由主界面进入设置界面,然后回到主界面的效果。

由于每当在推进场景时,需要保证总是有足够的额外内存可供推进的场景使用,但这一点很难测试。建议要推进的场景都应该是轻巧的,只占用少量的内存,并且只弹出自身,而不会推进其它场景

3 更改初始界面

打开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());
}

下面直接运行来看看哈

4 带效果的切换

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(时间,目标场景);

//本场景变暗消失后另一场景慢慢出现

[3]:CCTransitionFadeBL::create(时间,目标场景);

//本场景右上角到左下角方块消失到另一场景

[4]:CCTransitionFadeDown::create(时间,目标场景);

//本场景从上到下横条消失到另一场景

[5]:CCTransitionFadeTR::create(时间,目标场景);

//本场景左下角到右上角方块消失到另一场景

[6]:CCTransitionFadeUp::create(时间,目标场景);

//本场景从下到上横条消失到另一场景

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

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

//样式(可以不写):

//kCCTransitionOrientationLeftOver(左向右翻转)

//kCCTransitionOrientationRightOver(右向左翻转)

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

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

//样式(可以不写):

//kCCTransitionOrientationLeftOver(左向右翻转)

//kCCTransitionOrientationRightOver(右向左翻转)

[9]:CCTransitionFlipY::create(时间,目标场景);

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

//样式(可以不写):

//kCCTransitionOrientationUpOver(下向上翻转)

//kCCTransitionOrientationDownOver(上向下翻转)

[10]:CCTransitionJumpZoom::create(时间,目标场景);

//本场景跳动消失后另一场景跳动出现

[11]:CCTransitionMoveInB::create(时间,目标场景);

//另一场景由整体从下面出现

[12]:CCTransitionMoveInL::create(时间,目标场景);

//另一场景由整体从左面出现

[13]:CCTransitionMoveInT::create(时间,目标场景);

//另一场景由整体从上面出现

[14]:CCTransitionMoveInR::create(时间,目标场景);

//另一场景由整体从右面出现

[15]:CCTransitionPageTurn::create(时间,目标场景,bool);

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

[16]:CCTransitionProgressHorizontal::create(时间,目标场景);

//本场景从左到右消失同时另一场景出现

[17]:CCTransitionProgressInOut::create(时间,目标场景);

//本场景从中间到四周消失同时另一场景出现

[18]:CCTransitionProgressOutIn::create(时间,目标场景);

//本场景从四周到中间消失同时另一场景出现

[19]:CCTransitionProgressRadialCCW::create(时间,目标场景);

//本场景逆时针消失到另一场景

[20]:CCTransitionProgressRadialCW::create(时间,目标场景);

//本场景顺时针消失到另一场景

[21]:CCTransitionProgressVertical::create(时间,目标场景);

//本场景从上到下消失同时另一场景出现

[22]:CCTransitionRotoZoom::create(时间,目标场景);

//本场景旋转消失后另一场景旋转出现

[23]:CCTransitionShrinkGrow::create(时间,目标场景);

//本场景缩小切换到另一场景放大

[24]:CCTransitionSlideInB::create(时间,目标场景);

//本场景向上滑动到另一场景

[25]:CCTransitionSlideInL::create(时间,目标场景);

//本场景向右滑动到另一场景

[26]:CCTransitionSlideInR::create(时间,目标场景);

//本场景向左滑动到另一场景

[27]:CCTransitionSlideInT::create(时间,目标场景);

//本场景向下滑动到另一场景

[28]:CCTransitionSplitCols::create(时间,目标场景);

//本场景三矩形上下消失后另一场景三矩形上下出现

[29]:CCTransitionSplitRows::create(时间,目标场景);

//本场景三矩形左右消失后另一场景三矩形左右出现

[30]:CCTransitionTurnOffTiles::create(时间,目标场景);

//本场景小方块消失到另一场景

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

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

//样式(可以不写):

//kCCTransitionOrientationLeftOver(左向右翻转)

//kCCTransitionOrientationRightOver(右向左翻转)

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

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

//样式(可以不写):

//kCCTransitionOrientationLeftOver(左向右翻转)

//kCCTransitionOrientationRightOver(右向左翻转)

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

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

//样式(可以不写):

//kCCTransitionOrientationUpOver(下向上翻转)

//kCCTransitionOrientationDownOver(上向下翻转)

时间: 2024-12-14 18:17:01

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

quick cocos2d x场景切换的生命周期函数调用学习

先上一个场景的基本模版: 1 local ModelScene = class("ModelScene", function() 2 return display.newScene("ModelScene") 3 end) 4 5 function ModelScene:ctor() 6 self.sceneName = "ModelScene" 7 -- 注册点击事件监听 8 self.layer = display.newLayer() 9

使用 Cocos2d 3.1.1 创建 Windows Phone 8 游戏开发环境

cocos2d-x 是目前流行的游戏游戏开发框架,目前最新的版本是 3.1.1, 网上有些教程已经比较老了,本文将会介绍如何使用最新的 3.1.1 创建 Windows Phone 8 开发环境. 本文假设你已经安装了 VS2012 或者 VS2013,并且已经安装了 Windows Phone8 的 SDK. 一.下载和安装 Cocos2d-x 官网地址:http://www.cocos2d-x.org/ 点击菜单栏中的 Download, 进入下载页面. 我们下载最新的 V3.1.1,新版功

cocos2dx基础篇(26)——场景切换CCTransitionScene

[唠叨] 游戏中两个场景的切换时经常要被用到的,cocos2dx引擎为我们提供了许多场景切换的动画,我感觉有些和PPT的切换很类似,所以感觉很熟悉.如:淡入淡出.翻页.跳入跳出等等. 本节要讲的场景切换方式十分丰富,不过内容比较简单,很容易掌握. [致谢] http://gl.paea.cn/contents/d4d676f371519df4.html [场景管理] 在讲场景切换CCTransitionScene之前,先来复习一下场景CCScene的管理. 游戏运行的过程中,每次只能运行一个场景

(转)CocosCreator零基础制作游戏《极限跳跃》七、制作游戏结束场景并实现场景切换

CocosCreator零基础制作游戏<极限跳跃>七.制作游戏结束场景并实现场景切换 前面我们实现了游戏的碰撞检测,碰到障碍物我们的角色就会死掉并开始掉落,角色掉落到屏幕底部时候游戏结束,并跳到结束场景. 我们在资源管理器新建GameOver场景.双击打开场景,调整大小为480x800,添加界面需要的节点.如图. 这样我们的结束场景就制作好了.可以预览下. 制作好了,结束场景我们就需要把我们游戏的三个场景关联起来了. 首先我们双击打开我们的第一个场景WelcomeScene.然后在资源管理器创

【Cocos2D学习】Cocos2d-x之CCScene场景切换效果的使用

我们要怎样切入游戏场景呢?其实就会要用到CCScene场景切换的知识,然后场景的切换效果,也即是场景的一种过渡效果...   Cocos2d-x提供了很多场景间切换的效果,可以方便大家使用 过渡类: //用CCTransition绕y轴翻转x轴过渡到FilipXpScene CCDirector::sharedDirector()->replaceScene( CCTransitionFlipX::create(2, pScene) ); CCTransitionFlipX::create(&quo

cocos2d-x 场景切换

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************* 今天终于把界面交上去了,~~o(>_<)o ~~,花费了好多时间... 做个  场景切换  来庆祝一下. PS:欢迎大家一起讨论呀~,共同加油! ********************************* 本文三部分: 1.前言 2.菜单按钮执行场景切换

8 cocos2dx添加场景切换效果,控制场景切换彻底完成之后再执行动画

 1 添加场景切换效果 供场景切换的类: CCTransitionJumpZoom CCTransitionProgressRadialCCW CCTransitionProgressRadialCW CCTransitionProgressHorizontal CCTransitionProgressVertical CCTransitionProgressInOut CCTransitionProgressOutIn CCTransitionCrossFade CCTransitionF

Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源代码分析

上一章我们分析了Scene与Layer相关类的源代码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源代码. 直接看TransitionScene的定义 class CC_DLL TransitionScene : public Scene { public: /** Orientation Type used by some transitions */ enum class Orientation { /// An horizontal or

Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源码分析

上一章我们分析了Scene与Layer相关类的源码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源码. 直接看TransitionScene的定义 class CC_DLL TransitionScene : public Scene { public: /** Orientation Type used by some transitions */ enum class Orientation { /// An horizontal orie