创建一个新场景方法
首先在src中添加对应的头文件和cpp文件,这里以MyGame.h和MyGame.cpp为例,在这里实现新场景的创建
一、MyGame.h:
#pragma once
#include "cocos2d.h"
using namespace cocos2d;
class MyGame:public Layer
{
public:
MyGame();
~MyGame();
public:
static Scene* createScene(); //创建场景函数
virtual bool init(); //初始化函数
CREATE_FUNC(MyGame); //创建这个层函数
private:
Director* director;
Size visibleSize;
Vec2 origin;
void backButton(); //设置一个返回上一场景的按钮
};
二、MyGame.cpp:
#include "MyGame.h"
MyGame::MyGame()
{
}
MyGame::~MyGame()
{
}
Scene* MyGame::createScene() //创建场景函数
{
Scene* MyGameScene = Scene::create(); //创建场景
auto MyGameLayer = MyGame::create(); //创建自己写的这个层
MyGameScene->addChild(MyGameLayer); //添加子节点
TransitionCrossFade *crossFade = TransitionCrossFade::create(3.0f, MyGameScene);
return crossFade; //返回当前场景
//TransitionFade *fade = TransitionFade::create(3.0f, MyGameScene);
//return fade;
//TransitionFadeBL *fadeBL = TransitionFadeBL::create(3.0f, MyGameScene);
//return fadeBL;
//TransitionFadeDown *fadeDown = TransitionFadeDown::create(3.0f, MyGameScene);
//return fadeDown;
//TransitionFadeTR *fadeTR = TransitionFadeTR::create(3.0f, MyGameScene);
//return fadeTR;
//TransitionJumpZoom* jumpZoom = TransitionJumpZoom::create(3.0f, MyGameScene);
//return jumpZoom;
//TransitionMoveInL* moveInL = TransitionMoveInL::create(3.0f, MyGameScene);
//return moveInL;
//TransitionPageTurn *pageTurn = TransitionPageTurn::create(3.0f,MyGameScene,false);
//return pageTurn;
}
bool MyGame::init()//初始化函数
{
if (!Layer::init())
{
return false;
}
director = Director::getInstance();
visibleSize = director->getVisibleSize();
origin = director->getVisibleOrigin();
//===================================
//背景
Sprite *bgSprite = Sprite::create("BG//Back_1.jpg");
bgSprite->setAnchorPoint(Vec2::ZERO);
bgSprite->setScale(visibleSize.height / bgSprite->getContentSize().height, visibleSize.width / bgSprite->getContentSize().width);
bgSprite->setPosition(Vec2(0, 0));
this->addChild(bgSprite);
//人物
Sprite* fSprite = Sprite::create("f.png");
fSprite->setPosition(visibleSize / 2);
this->addChild(fSprite);
//添加返回上一场景的按钮
MenuItemImage *backItem = MenuItemImage::create("Buttons//BackButton.png", "Buttons//BackButtonSelected.png",CC_CALLBACK_0(MyGame::backButton,this));
Menu *menu = Menu::create(backItem, NULL);
menu->setAnchorPoint(Vec2::ONE);
menu->setPosition(visibleSize.width - backItem->getContentSize().width / 2, visibleSize.height - backItem->getContentSize().height / 2);
this->addChild(menu);
//===================================
}
void MyGame::backButton()
{
director->popScene();
}
三、在入口场景中添加一个按钮,用于进入新场景:
MenuItemImage *playItem = MenuItemImage::create("Buttons/playButton.png", "Buttons/playButtonSelected.png", CC_CALLBACK_1(HelloWorld::playItemCallback,this));
Menu *menu_1 = Menu::create(playItem,NULL);
menu_1->setPosition(Vec2(50, 700));
this->addChild(menu_1);
对应的回调函数:
void HelloWorld::playItemCallback(cocos2d::Ref* pSender){
Scene *MyGameScene = MyGame::createScene();
Director::getInstance()->pushScene(MyGameScene);
}
四、完成,点击按钮即可进行新场景,点击"返回"即可返回上一场景