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
各解説はソースコードのコメント文を参照してください。
出来る限り分かりやすいようにしていますのでご了承願います。
コメントをお書きください