2014年07月17日

cocosbuilder使えず

やっと開発者らしい内容を。

cocos2d-x 3.1.1 、cocosbuilder 3.0-alpha5で詰まった。

cocosbuilderでCCMenuを追加し、プロジェクトでそれをタップした時にイベントを実行させるための部分。
書籍やブログでいろんな方々が紹介されている標準的な方法だと思う。

cocos2d::SEL_MenuHandler GameLayer::onResolveCCBCCMenuItemSelector(cocos2d::Ref* pTarget, const char* pSelectorName)
{
    CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "tappedTest”, GameLayereLayer:: tappedTest);
}

この、CCB_SELECTORRESOLVER_CCMENUITEM_GLUEの行がエラーでビルドできない。

エラー↓
Static_cast from 'void (GameLayer::*)(cocos2d::Ref *, cocos2d::extension::Control::EventType)' to 'cocos2d::SEL_MenuHandler' (aka 'void (cocos2d::Ref::*)(cocos2d::Ref *)') is not allowed

マクロを展開し、調べていくとどうもcocos2d 3.xからはmenu_selectorというのが使えないらしく以下に書き換えたがまた別のエラーになる。
    if(pTarget == this && strcmp(pSelectorName, "tappedTest") == 0)
    {
        return static_cast<cocos2d::SEL_MenuHandler>(std::bind(&GameLayer::tappedTest, this, std::placeholders::_1, std::placeholders::_2))
    }

エラー↓
Cannot cast from type '__bind<void (GameLayer::*)(cocos2d::Ref *, cocos2d::extension::Control::EventType), GameLayer *, std::__1::placeholders::__ph<1> &, std::__1::placeholders::__ph<2> &>' to member pointer type 'cocos2d::SEL_MenuHandler' (aka 'void (cocos2d::Ref::*)(cocos2d::Ref *)')

rvalueリファレンスに関係がありそうでテンプレートを使ってキャストするなどやってみたがダメだった。
template<typename T_class>
T_class castFromRValue(T_class && f)
{
    return std::forward<T_class>(f);;
}

1週間ほどGoogle検索やStackOverflowなど検索してみましたが現状の私のスキルでは解決にいたれなかった。
何か根本的に別の問題があるのか。

とりあえず、英語の勉強とSpritebuilderの勉強を開始して次に進もうとしている。
posted by aso-developer at 17:29| Comment(2) | 日記
この記事へのコメント
はじめまして。
自分もcocos2d-xでアプリ開発を行っているものです。まだやり始めたばかりですが(; ・`д・´)

CCB_SELECTORRESOLVER_CCMENUITEM_GLUEでエラーが起きてビルドできない件、自分も同じ問題で躓いてます。。。
cocosbuilderでLayerのCustomClassがNULLのままPublishしたのが原因だと思ったんですがどうやらそうでもないようで、そもそもcocosbuilderってcocos2d-x 2.x系の時からcocosbuilderのバージョンが違うだけでビルドできないとかいった相性問題があったようですね。
3.x系リリース後にcocosbuilderは特にupdateされてないようですし、今はspritebuilder(もしくはcocostudio)使うしか無いのかもしれませんm(_ _)m
Posted by cowboy_tokyo at 2014年08月01日 19:15
コメントありがとうございます。

やはりcocosbuilderそのものに問題がありそうですねぇ。

その後、spritebuilderのチュートリアルをやってみてけっこう使いやすい印象を受けました。
ただ、Androidアプリも作るにはApportable必要だしcocostudioのほうが今のところ勢いがありそうですね。
Posted by aso-developer at 2014年08月02日 08:30
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: