Cocos游戏场景切换(C++)

这里是主场景的界面的C++代码:
#include "HelloWorldScene.h"
#include"GameScene.h"
USING_NS_CC;
using namespace std;
Scene* HelloWorld::createScene(){
    auto scene = Scene::create();
    auto layer = HelloWorld::create();
    scene->addChild(layer);
    return scene;
}
bool HelloWorld::init(){
    if ( !Layer::init() ){
        return false;
    }
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
	Sound->playBackgroundMusic("21.mp3",true);
	auto background = Sprite::create("zhujiemian.png");
	this->addChild(background);
	background->setAnchorPoint(Vec2(0,0));
	auto start = MenuItemFont::create("start", CC_CALLBACK_1(HelloWorld::onStart, this));
	start->setName("start");
	auto quit = MenuItemFont::create("quit", CC_CALLBACK_1(HelloWorld::onStart, this));
	quit->setName("quit");
	auto menu = Menu::create(start,quit,nullptr);
	menu->alignItemsVertically();
	this->addChild(menu);
	menu->setPositionY(visibleSize.height / 2 - 400);
    return true;
}
void HelloWorld::onStart(Ref* pSender){   
	auto ss = (MenuItemFont*)pSender;
	string str = ss->getName();
	Sound->playEffect("21.mp3");
	if (str == "start"){    //切换场景
		auto scene = GameScene::createScene();
		Director::getInstance()->replaceScene(TransitionSlideInT::create(2, scene));
	}
	else{
		Director::getInstance()->end();
	}
	
}
这里是对应的头文件:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include"SimpleAudioEngine.h"
#include "cocos2d.h"
using namespace CocosDenshion;
class HelloWorld : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
	SimpleAudioEngine* Sound = SimpleAudioEngine::getInstance();
    virtual bool init();
	void onStart(cocos2d::Ref* pSender);
    CREATE_FUNC(HelloWorld);
};

#endif 
这里是第二场景的C++代码:
#include"GameScene.h"
#include "HelloWorldScene.h"

USING_NS_CC;
using namespace std;

Scene* GameScene::createScene(){
	auto scene = Scene::create();
	auto layer = GameScene::create();
	scene->addChild(layer);
	return scene;
}
bool GameScene::init(){
	if (!Layer::init()){
		return false;
	}
	
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	auto background = Sprite::create("background.jpg",Rect(0,0,768,1024));
	this->addChild(background);
	background->setAnchorPoint(Vec2(0, 0));
	auto quit = MenuItemFont::create("quit", CC_CALLBACK_1(GameScene::abc, this));
	quit->setName("quit");
	auto menu = Menu::create(quit, nullptr);
	menu->alignItemsVertically();
	this->addChild(menu);
	menu->setPositionY(visibleSize.height / 2 + 400);
	menu->setPositionX(visibleSize.width / 2 + 300);
	return true;
}
void GameScene::abc(Ref* pSender){
	auto ss = (MenuItemFont*)pSender;
	string str = ss->getName();
	if (str == "quit"){    //切换场景
		auto scene = HelloWorld::createScene();
		Director::getInstance()->replaceScene(TransitionSlideInT::create(2, scene));
	}
}
然后是对应的头文件:
#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__
#include"SimpleAudioEngine.h"
#include "cocos2d.h"
using namespace CocosDenshion;
class GameScene : public cocos2d::Layer
{
public:
	static cocos2d::Scene* createScene();
	SimpleAudioEngine* Sound = SimpleAudioEngine::getInstance();
	virtual bool init();
	void abc(cocos2d::Ref* pSender);
	CREATE_FUNC(GameScene);
};
#endif
之间一些代码实现获取资源图片,然后进行两个场景之间的切换,对于代码不难,要多理解然后再学会去运用。

你可能感兴趣的:(c++)