这里是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打开
(源码免费下载)
先来看看效果:
一、场景切换知识
1 一些常识
入口:AppDelegate
场景:Scene(由开发者自己实现各种各样的scene)
场景组件:Layer(主要提供组管理的机制)和各种Node(基本要素)
场景切换:Director很显然一个简单的游戏基本上只需要自己自己实现几个Scene,添加一些Layer和Node进来,再找个合适的地方用Director进行切换即可。
2.说明
二、自定义登录界面
这里直接看代码了,自己把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(时间,目标场景);
//本场景变暗消失后另一场景慢慢出现
[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(上向下翻转)