新建立四个场景,每个场景切换有特殊的效果。
代码结构比较清晰。
#ifndef SCENES_H
#define SCENES_H
#include "cocos2d.h"
USING_NS_CC;
class Scenes : public Ref {
public:
Scenes();
~Scenes();
void initialize();
Scene *createScene2();
Scene *createScene3();
Scene *createScene4();
inline Scene *getScene1() { return scene1; };
protected:
Scene *scene1;
Scene *scene2;
Scene *scene3;
Scene *scene4;
};
#endif
#include "Scenes.h"
USING_NS_CC;
Scenes::Scenes() {
initialize();
}
Scenes::~Scenes() {}
void Scenes::initialize() {
// some upfront items that we need
auto dirs = Director::getInstance();
Size visibleSize = dirs->getVisibleSize();
Vec2 origin = dirs->getVisibleOrigin();
// create a scene
scene1 = Scene::create();
// create a node to hold non-sprites
auto nodeItems = Node::create();
nodeItems->setName("nodeItems");
// create a node to hold menu
auto menuNode = Node::create();
menuNode->setName("menuNode");
int index = 2;
auto thisSceneLabel = Label::createWithTTF("This is a Scene", "Marker Felt.ttf", 32);
thisSceneLabel->setPosition(200, 400);
scene1->addChild(thisSceneLabel, 1);
auto menuItem1 = MenuItemFont::create("Make a new scene");
menuItem1->setName("menuItem1");
menuItem1->setPosition(visibleSize.width/2, visibleSize.height - 80);
menuItem1->setCallback([&](cocos2d::Ref *sender) {
Director::getInstance()->replaceScene(createScene2());
});
auto menu = Menu::create(menuItem1, NULL);
menu->setName("menu");
menuNode->addChild(menu, 1);
menu->setPosition(Vec2::ZERO);
scene1->addChild(menuNode, 2);
};
Scene *Scenes::createScene2() {
auto dirs = Director::getInstance();
Size visibleSize = dirs->getVisibleSize();
scene2 = Scene::create();
// Retains the ownership.
// This increases the Ref's reference count.
scene2->retain();
auto nodeItems = Node::create();
nodeItems->setName("menuNode");
auto menuNode = Node::create();
nodeItems->setName("menuNode");
auto thisSceneLabel = Label::createWithTTF("This is a new Scene: Scene2", "Marker Felt.ttf", 32);
thisSceneLabel->setPosition(400, 500);
scene2->addChild(thisSceneLabel, 1);
auto menuItem1 = MenuItemFont::create("Make a new scene using a transition fade");
menuItem1->setPosition(400, 500);
menuItem1->setName("menuItem1");
menuItem1->setPosition(500, 200);
menuItem1->setCallback([&](cocos2d::Ref *sender) {
Director::getInstance()->replaceScene(TransitionFade::create(0.5, createScene3(), Color3B(0, 255,255)));
});
auto menu = Menu::create(menuItem1, NULL);
menu->setName("menu");
menuNode->addChild(menu, 1);
menu->setPosition(Vec2::ZERO);
scene2->addChild(menuNode, 2);
return scene2;
}
Scene *Scenes::createScene3() {
auto dirs = Director::getInstance();
auto visibleSize = dirs->getVisibleSize();
scene3 = Scene::create();
scene3->retain();
auto nodeItems = Node::create();
nodeItems->setName("nodeItems");
auto menuNode = Node::create();
menuNode->setName("menuNode");
auto thisSceneLabel = Label::createWithTTF("This scene used a transition", "Marker Felt.ttf", 32);
thisSceneLabel->setPosition(400, 400);
scene3->addChild(thisSceneLabel, 1);
auto menuItem1 = MenuItemFont::create("Make a new Scene using a Flip");
menuItem1->setPosition(300, 300);
menuItem1->setCallback([&](cocos2d::Ref *sender) {
Director::getInstance()->replaceScene(TransitionFlipX::create(2, createScene4()));
});
auto menu = Menu::create(menuItem1, NULL);
menu->setPosition(Vec2::ZERO);
menuNode->addChild(menu, 1);
scene3->addChild(menuNode, 2);
return scene3;
}
Scene *Scenes::createScene4() {
scene4 = Scene::create();
scene4->retain();
auto thisSceneLabel = Label::createWithTTF("scene4: this scene use a flip", "Marker Felt.ttf", 32);
thisSceneLabel->setPosition(300, 200);
scene4->addChild(thisSceneLabel, 1);
return scene4;
}