読者です 読者をやめる 読者になる 読者になる

きょこみのーと

元六本木でGo書いてました。今はVRでGo書いてます。

ControlButtonをCocosBuilderで設置してCocos2d-xで連携する

Cocos2d-x C++ CocosBuilder

CocosBuilderで、ControlButtonを設置

f:id:kyokomi:20130929175606p:plain

とりあえず真ん中下くらいに表示されるように設定は以下のようにします。 あと、Cocos2d-x側で扱えるようにも設定しておきます。

  • Doc root varを選択し「mStartConrolButton」を入力
  • Positionをパーセントにし、x=50.0, y=20.0を設定

f:id:kyokomi:20130929175610p:plain

  • Selectorに「tappedStartButton」を入力
  • Targetを「Document root」に指定
  • Titleに「START」を入力
  • Font sizeを「24.00」に指定
  • Preferred sizeをパーセント指定にして、width=20.0, height=12.0
  • Sprite frameは、以下にあるサンプル画像を利用

    cocos2d-x-3.0alpha0-pre/samples/Cpp/TestCpp/Resources/ccb

f:id:kyokomi:20130929175616p:plain

わかりやすいようにTimelineにも名前を設定

f:id:kyokomi:20130929175608p:plain

こんな感じです。

あとSceneのクラスで判別できるようにCCLayerにclass名を設定。

f:id:kyokomi:20130929175619p:plain

f:id:kyokomi:20130929175613p:plain

これを設定しないとMenuItemやControlButtonのSelectorをキャッチできませんのでご注意ください。

ここまでできたら「File > Publish」してXcodeにaddします。

Cocos2d-x側でControlButtonのSelectorをキャッチする

【TitleScene.h】

class TitleScene : public Layer
, public CCBSelectorResolver /** CocosBuilderからメニューとかコントロールボタンを取得するのに必要 */
{
    // CCBSelector
    virtual SEL_MenuHandler onResolveCCBCCMenuItemSelector(Object* pTarget, const char* pSelectorName);
    virtual Control::Handler onResolveCCBCCControlSelector(Object * pTarget, const char* pSelectorName);

    // ※add Startボタンのタップイベント用
    void tappedStartButton(Object * pTarget, Control::EventType pControlEventType);
public:
    // コンストラクタ、デストラクタ
    TitleScene();
    virtual ~TitleScene();

    // createメソッド
    CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(TitleScene, create);
};

【TitleScene.cppのonResolveCCBCCControlSelectorを修正】

Control::Handler TitleScene::onResolveCCBCCControlSelector(cocos2d::Object *pTarget, const char *pSelectorName)
{
    CCLOG("name = %s", pSelectorName);
    // ※add Startボタンのタップイベントを結びつける
    CCB_SELECTORRESOLVER_CCCONTROL_GLUE(this, "tappedStartButton", TitleScene::tappedStartButton);
    return NULL;
}

// ※add タップ時の処理
void TitleScene::tappedStartButton(Object * pTarget, Control::EventType pControlEventType)
{
    CCLOG("tappedStartButton eventType = %d", pControlEventType);
}

起動してSTARTボタンを押してみる。

f:id:kyokomi:20130929175626p:plain

ログがバッチリでてます。

f:id:kyokomi:20130929175633p:plain

これでControlButtonとの紐付けも完了です!