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

这里是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:释放当前场景,再从代执行场景栈中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,则直接结束应用。与pushScene 成对使用,可以达到形如由主界面进入设置界面,然后回到主界面的效果。
由于每当在推进场景时,需要保证总是有足够的额外内存可供推进的场景使用,但这一点很难测试。建议要推进的场景都应该是轻巧的,只占用少量的内存,并且只弹出自身,而不会推进其它场景


二、自定义登录界面

这里直接看代码了,自己把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(上向下翻转)




版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是