Cocos2d-x Ver 3.x メニューラベルの作成

Cocos2dx 3.x C++言語

MenuLbTopScene.hを次のように変更してみてください。

#ifndef __MenuLabel__MenuLbTopScene__

#define __MenuLabel__MenuLbTopScene__


#include "cocos2d.h"


// 名前空間 #define USING_NS_CC using namespace cocos2d

USING_NS_CC;


class MenuLbTopScene : public Layer

{

    

public:

    

    // 初期化のメソッド

    virtual bool init();

    

    static cocos2d::Scene* createScene();

    

    // テキストスタートボタン押下時の処理宣言 戻る Object → Ref に変更

    void menuAction01(Ref *pSender);

    // テキストスタートボタン押下時の処理宣言 戻る Object → Ref に変更

    void menuAction02(Ref *pSender);

    

    // create()を使えるようにしている。

    CREATE_FUNC(MenuLbTopScene);

};


#endif /* defined(__MenuLabel__MenuLbTopScene__) */

※重要

public内にタッチイベント用にそれぞれテキストスタートボタンのメソッドの宣言をする必要があります。


public:

 

    // テキストスタートボタン押下時の処理宣言 戻る Object → Ref に変更

    void menuAction01(Ref *pSender);

    // テキストスタートボタン押下時の処理宣言 戻る Object → Ref に変更

    void menuAction02(Ref *pSender);


 

MenuLbTopScene.cppを次のように変更してみてください。

#include "MenuLbTopScene.h"


// 名前空間 #define USING_NS_CC using namespace cocos2d

USING_NS_CC;


Scene* MenuLbTopScene::createScene()

{

    // 「シーン」は自動解放オブジェクトです

    auto scene = Scene::create();

    

    // 「レイアウト」は自動解放オブジェクトです

    auto layer = MenuLbTopScene::create();

    

    // シーンに子としてレイヤーを追加

    scene->addChild(layer);

    

    // シーンを返す

    return scene;

}


// INIT」初期化

bool MenuLbTopScene::init()

{

    if ( !Layer::init() )

    {

        return false;

    }

    

    // 画面サイズを取得

    Size winSize = Director::getInstance()->getVisibleSize();

    

    // バックグランドカラー

    auto background = LayerColor::create(Color4B::BLUE,

                                         winSize.width,

                                         winSize.height);

    // バックグランドカラー 第2引数は表示順

    this->addChild(background, 0);

    

    // ラベルを生成

    Label* label1 = Label::createWithSystemFont("Cocos2d-x", "Arial", 120);

    

    // ラベルの設置

    label1->setPosition(Point(winSize.width /2 ,winSize.height/1.5));

    

    // ラベルタイトルを追加

    this->addChild(label1,1);

    

    // ラベルを生成

    //Ver3.x CC_CALLBACK_1 マクロ(引数が1つ)にすること

    auto labelBtnLabel01 = LabelTTF::create("ラベルボタン01", "Arial", 48);

    // ラベルメニューアクション先の設定

    auto labelItem01 = MenuItemLabel::create(labelBtnLabel01,

                    CC_CALLBACK_1(MenuLbTopScene::menuAction01, this));

    

    // ラベルを生成

    auto labelBtnLabel02 = LabelTTF::create("ラベルボタン02", "Arial", 48);

    // ラベルメニューアクション先の設定

    auto labelItem02 = MenuItemLabel::create(labelBtnLabel02,

                    CC_CALLBACK_1(MenuLbTopScene::menuAction02, this));

    

    // ラベルの設置

    labelItem01->setPosition(Point(winSize.width / 2,winSize.height / 2.0));

    // ラベルの設置

    labelItem02->setPosition(Point(winSize.width / 2,winSize.height / 2.5));

    

    // メニューを作成 自動解放オブジェクト

    auto menu = Menu::create(labelItem01,labelItem02,NULL);

    

    menu->setPosition(Point::ZERO);

    // メニューを追加

    this->addChild(menu, 1);

    

    

    return true;

}


// menuAction01ボタン

void MenuLbTopScene::menuAction01(Ref *pSender)

{

    CCLOG("ラベルボタン01");

    

}


// menuAction02ボタン

void MenuLbTopScene::menuAction02(Ref *pSender)

{

    CCLOG("ラベルボタン02");

    

}



コールバック関数
Ver3.xから、マクロで登録されたコールバック関数が登場します。
使い方は、指定したメソッドを呼び出すのですが、呼び出すメソッドの引数に応じて使い分けます。

CC_CALLBACK_0
CC_CALLBACK_1
CC_CALLBACK_2

 

CC_CALLBACK_0

//引数がない
const std::function< void()> &func
 
//例
void MenuLbTopScener::menuAction0(){
 
}

 

CC_CALLBACK_1

//引数が1つ
const std::function< void(Node *)> &func
 
//例
void MenuLbTopScene::menuAction1(Ref *sender){

}

 

CC_CALLBACK_2

//引数が2つ
std::function<bool(Touch*, Event*)> onTouchBegan
 
//例
void MenuLbTopScene::menuAction2(Touch *touch,Event *event){

}

 

GitHub MenuLabel_Cocos2d-x

 

各解説はソースコードのコメント文を参照してください。

出来る限り分かりやすいようにしていますのでご了承願います。

  

目 次