Cocos2dx 3.x C++言語
画面遷移用の2つのクラスをそれぞれ作成し使用しています。
TopScene.h
TopScene.cpp
SecondScene.h
SecondScene.cpp
TopScene.h画面のソースコード
TopScene.h
#ifndef __Screen__TopScene__
#define __Screen__TopScene__
#include "cocos2d.h"
USING_NS_CC;
class TopScene : public cocos2d::Layer
{
public:
static Scene *createScene();
virtual bool init();
CREATE_FUNC(TopScene);
void makeBackground();
// スタートボタン押下時の処理宣言 戻る Object → Ref に変更
void pushStart(Ref *pSender);
};
#endif /* defined(__Screen__TopScene__) */
TopScene.cpp
#include "TopScene.h"
#include "SecondScene.h"
//音をならすためにinclude
#include "SimpleAudioEngine.h"
Scene *TopScene::createScene()
{
auto scene = Scene::create();
auto layer = TopScene::create();
scene->addChild(layer);
return scene;
}
bool TopScene::init()
{
if (! Layer::init()) {
return false;
}
// バックグラウンド
makeBackground();
// 画面サイズを取得
Size winSize = Director::getInstance()->getWinSize();
// スタートボタンを設置
auto startButton = MenuItemImage::create(
"CloseNormalGo.png", // 通常状態の画像
"CloseSelected.png", // 押下状態の画像
CC_CALLBACK_1(TopScene::pushStart, this)); // 押下時のアクション
// ボタンの設置
startButton->setPosition(Point(winSize.width /2 ,winSize.height/2));
// メニューを作成 自動解放オブジェクト
auto menu = Menu::create(startButton, NULL);
//
menu->setPosition(Point::ZERO);
// メニューを追加
this->addChild(menu, 1);
return true;
}
void TopScene::makeBackground()
{
// 画面サイズを取得
Size winSize = Director::getInstance()->getWinSize();
//マルチレゾリューション対応がどうとか
Point origin = Director::getInstance()->getVisibleOrigin();
// バックグランドカラー
auto background = LayerColor::create(Color4B::BLUE,
winSize.width,
winSize.height);
// バックグランドカラー 第2引数は表示順
this->addChild(background, 0);
// タイトルを設置
auto lbl_title = Label::createWithSystemFont
("Top","HiraKakuProN-W6", 100);
lbl_title->setPosition(Point(origin.x + winSize.width/2,
origin.y + winSize.height
-lbl_title->getContentSize().height));
// ラベルタイトルを追加
this->addChild(lbl_title,1);
}
//
void TopScene::pushStart(Ref *pSender)
{
CCLOG("Pushボタン");
// 効果音を鳴らす
CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("onepoint26.mp3");
// 遷移先の画面のインスタンス
Scene *pScene = SecondScene::createScene();
// 0.5秒かけてフェードアウトしながら次の画面に遷移します
// 引数1:フィードの時間
// 引数2:移動先のシーン
// 引数3:フィードの色(オプション)
TransitionFade* transition = TransitionFade::create(0.5f, pScene);
// 遷移実行 遷移時のアニメーション
// 直前のsceneはもう使わないから捨ててしまう方法。基本はこれになります。
Director::getInstance()->replaceScene(transition);
}
SecondScene画面のソースコード
SecondScene.h
#ifndef __Screen__SecondScene__
#define __Screen__SecondScene__
#include "cocos2d.h"
USING_NS_CC;
class SecondScene : public cocos2d::Layer
{
public:
static Scene *createScene();
virtual bool init();
CREATE_FUNC(SecondScene);
void makeBackground();
// スタートボタン押下時の処理宣言 戻る Object → Ref に変更
void pushBack(cocos2d::Ref *pSender);
};
#endif /* defined(__Screen__SecondScene__) */
SecondScene.cpp
#include "SecondScene.h"
#include "TopScene.h"
//音をならすためにinclude
#include "SimpleAudioEngine.h"
Scene *SecondScene::createScene()
{
auto scene = Scene::create();
auto layer = SecondScene::create();
scene->addChild(layer);
return scene;
}
bool SecondScene::init()
{
if (! Layer::init()) {
return false;
}
// バックグラウンド
makeBackground();
//画面サイズを取得
Size winSize = Director::getInstance()->getVisibleSize();
//戻るボタンを設置
auto backButton = MenuItemImage::create(
"CloseNormalBack.png", //表示
"CloseSelected.png", //タップ時の画像
CC_CALLBACK_1(SecondScene::pushBack, this));
backButton->setPosition(Point(winSize.width /2 ,winSize.height/2));
//create menu, it's an autorelease object
auto menu = Menu::create(backButton, NULL);
menu->setPosition(Point::ZERO);
this->addChild(menu, 1);
return true;
}
void SecondScene::makeBackground()
{
//画面の座標関係の詳しい説明はここ
http://www.cocos2d-x.org/wiki/Coordinate_System
//画面サイズを取得
Size winSize = Director::getInstance()->getVisibleSize();
//マルチレゾリューション対応がどうとか
Point origin = Director::getInstance()->getVisibleOrigin();
// バックグランドカラー
auto background = LayerColor::create(Color4B::ORANGE,
winSize.width,
winSize.height);
//バックグランドカラー追加 第2引数は表示順
this->addChild(background, 0);
//タイトルを設置
auto lbl_title = Label::createWithSystemFont
("Second", "HiraKakuProN-W6", 100);
lbl_title->setPosition(Point(origin.x + winSize.width/2,
origin.y + winSize.height
-lbl_title->getContentSize().height));
this->addChild(lbl_title,1);
}
// pushBackボタン
void SecondScene::pushBack(Ref *pSender)
{
// 効果音を鳴らす
CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("onepoint26.mp3");
// 遷移先の画面のインスタンス
Scene *pScene = TopScene::createScene();
// 0.5秒かけてフェードアウトしながら次の画面に遷移します
// 引数1:フィードの時間
// 引数2:移動先のシーン
// 引数3:フィードの色(オプション)
TransitionFade* transition = TransitionFade::create(0.5f, pScene);
//遷移実行 遷移時のアニメーション
Director::getInstance()->replaceScene(transition);
}
GitHub Screen_Cocos2d-x
コメントをお書きください
Rebbecca Titcomb (水曜日, 25 1月 2017 02:42)
You really make it seem really easy together with your presentation but I in finding this topic to be really one thing that I think I might by no means understand. It kind of feels too complicated and very broad for me. I'm looking ahead on your subsequent put up, I will attempt to get the hang of it!