Cocos2d-x 创建一个新场景方法

创建一个新场景方法

首先在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);
}

四、完成,点击按钮即可进行新场景,点击"返回"即可返回上一场景
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浔汐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值