Cocos2dx 3.x C++言語
MenuTopScene.hを次のように変更してみてください。
#ifndef __Menu__MenuTopScene__
#define __Menu__MenuTopScene__
#include "cocos2d.h"
// 名前空間 #define USING_NS_CC using namespace cocos2d
USING_NS_CC;
class MenuTopScene : public Layer
{
public:
// 初期化のメソッド
virtual bool init();
static cocos2d::Scene* createScene();
// スタートボタン押下時の処理宣言 戻る Object → Ref に変更
void pushStart01(Ref *pSender);
// スタートボタン押下時の処理宣言 戻る Object → Ref に変更
void pushStart02(Ref *pSender);
// create()を使えるようにしている。
CREATE_FUNC(MenuTopScene);
};
#endif /* defined(__Menu__MenuTopScene__) */
※重要
public内にタッチイベント用にそれぞれスタートボタンのメソッドの宣言をする必要があります。
public:
// スタートボタン押下時の処理宣言 戻る Object → Ref に変更
void pushStart01(Ref *pSender);
// スタートボタン押下時の処理宣言 戻る Object → Ref に変更
void pushStart02(Ref *pSender);
MenuTopScene.cppを次のように変更してみてください。
#include "MenuTopScene.h"
// 名前空間 #define USING_NS_CC using namespace cocos2d
USING_NS_CC;
Scene* MenuTopScene::createScene()
{
// 「シーン」は自動解放オブジェクトです
auto scene = Scene::create();
// 「レイアウト」は自動解放オブジェクトです
auto layer = MenuTopScene::create();
// シーンに子としてレイヤーを追加
scene->addChild(layer);
// シーンを返す
return scene;
}
// 「INIT」初期化
bool MenuTopScene::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);
// ボタンを押した時にメソッドを呼び出す
.h = void pushStart01(Ref *pSender); 宣言必要
// pushStart01(メソッド)
auto startButton01 = MenuItemImage::create(
"menu-image1.png", // 通常状態の画像
"menu-image1-hover.png", // 押下状態の画像
CC_CALLBACK_1(MenuTopScene::pushStart01, this)); // 押下時のアクション
// ボタンを押した時にメソッドを呼び出す
.h = void pushStart02(Ref *pSender); 宣言必要
// pushStart02(メソッド)
auto startButton02 = MenuItemImage::create(
"menu-image2.png", // 通常状態の画像
"menu-image2-hover.png", // 押下状態の画像
CC_CALLBACK_1(MenuTopScene::pushStart02, this)); // 押下時のアクション
//ボタンを押した時にラムダ式(init内部記述式)を呼び出す
auto startButton03 = MenuItemImage::
create("menu-image3.png","menu-image3-hover.png",[(Ref*sender){
CCLOG("Pushボタン03");
});
// ボタンの設置
startButton01->setPosition(Point(winSize.width / 2,winSize.height /2.1));
startButton02->setPosition(Point(winSize.width / 2,winSize.height /2.8));
startButton03->setPosition(Point(winSize.width / 2,winSize.height /4.2));
//メニューを作成 自動解放オブジェクト
auto menu = Menu::create(startButton01,startButton02,startButton03,NULL);
menu->setPosition(Point::ZERO);
// メニューを追加
this->addChild(menu, 1);
return true;
}
// pushStart01ボタン
void MenuTopScene::pushStart01(Ref *pSender)
{
CCLOG("Pushボタン01");
}
// pushStart02ボタン
void MenuTopScene::pushStart02(Ref *pSender)
{
CCLOG("Pushボタン02");
}
GitHub Menu_Cocos2d-x
コールバック関数
Ver3.xから、マクロで登録されたコールバック関数が登場します。
使い方は、指定したメソッドを呼び出すのですが、呼び出すメソッドの引数に応じて使い分けます。
CC_CALLBACK_0
CC_CALLBACK_1
CC_CALLBACK_2
CC_CALLBACK_0
//引数がない
const std::function< void()> &func
//例
void MenuTopScener::pushStart(){
}
CC_CALLBACK_1
//引数が1つ
const std::function< void(Node *)> &func
//例
void MenuTopScene::pushStart01(Ref *sender){
}
CC_CALLBACK_2
//引数が2つ
std::function<bool(Touch*, Event*)> onTouchBegan
//例
void MenuTopScene::pushStart02(Touch *touch,Event *event){
}
各解説はソースコードのコメント文を参照してください。
出来る限り分かりやすいようにしていますのでご了承願います。
コメントをお書きください