replaceScene() 메소드는 화면을 전환할 때 새로운 화면을 생성해서 화면을 전환 하고
이전에 화면 클래스는 메모리에서 해제합니다.
GameScene.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include "GameScene.h" #include "MenuScene.h" Scene* GameScene::createScene() { auto scene = Scene::create(); auto layer = GameScene::create(); scene->addChild(layer); return scene; } bool GameScene::init() { if (!Layer::init()) { return false; } auto item = MenuItemFont::create("Menu Scene", CC_CALLBACK_1(GameScene::changeScene, this)); auto menu = Menu::create(item, NULL); menu->alignItemsHorizontally(); this->addChild(menu); return true; } void GameScene::changeScene(Ref *sender) { Director::getInstance()->replaceScene(MenuScene::createScene()); } | cs |
MecuScene.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include "MenuScene.h" #include "GameScene.h" Scene* MenuScene::createScene() { auto scene = Scene::create(); auto layer = MenuScene::create(); scene->addChild(layer); return scene; } bool MenuScene::init() { if (!LayerColor::initWithColor(Color4B(0, 0, 255, 255))) //구분을 하기 위해 배경화면 변경 { return false; } auto item = MenuItemFont::create("Game Scene", CC_CALLBACK_1(MenuScene::changeScene, this)); auto menu = Menu::create(item, NULL); menu->alignItemsHorizontally(); this->addChild(menu); return true; } void MenuScene::changeScene(Ref *sender) { Director::getInstance()->replaceScene(GameScene::createScene()); // } | cs |
pushScene()과 popScene()은 스택구조방식이며
눈에 보이는 실행 결과는 replaceScene()과 같습니다.
실행 결과