2016-05-08 10 views
0

現在、私のソフトウェアをCocos2d-X 2.2.6からCocos2d-X 3.10に移行しており、MenuItemコールバックを動作させるのに問題があります。ここで私はのMainMenuオブジェクトを定義したヘッダファイルの一部であり、またCocos2d-Xメニューコールバック例外例外

bool MainMenuLayer::init() 
{ 
    bool result; 

    result = Layer::init(); 

    mainMenu = Menu::create(); 
    mainMenu->setPosition(0, 0); 
    this->addChild(mainMenu); 

    Sprite *equalSprite, *equalDownSprite; 
    MenuItemSprite *equalButton; 
    LabelBMFont *equalButtonLabel; 
    MenuItemLabel *equalButtonMenuLabel; 
    CCPoint equalButtonMenuLabelPosition; 
    CCPoint equalButtonPosition; 

    equalSprite = Sprite::createWithSpriteFrameName("botao_menu_igual.png"); 
    equalDownSprite = Sprite::createWithSpriteFrameName("botao_menu_igual_down.png"); 

    equalButton = MenuItemSprite::create(equalSprite, equalDownSprite, CC_CALLBACK_1(MainMenuLayer::buttonPressedCallback, this)); 

    equalButton->setEnabled(gameContext->getEqualGameEnabled()); 
    equalButton->setTag(EQUAL_BUTTON_TAG); 
    equalButtonPosition = Point(screenSize.width/4, screenSize.height/2); 
    equalButton->setPosition(mainMenu->convertToNodeSpace(equalButtonPosition)); 

    mainMenu->addChild(equalButton); 

    equalButtonLabel = LabelBMFont::create(localization->getLocalizedString("EqualButtonLabel"), fontHelper->getStdFont().c_str()); 
    equalButtonMenuLabel = MenuItemLabel::create(equalButtonLabel, CC_CALLBACK_1(MainMenuLayer::buttonPressedCallback, this)); 

    equalButtonMenuLabel->setTag(EQUAL_BUTTON_TAG); 
    equalButtonMenuLabelPosition.x = equalButtonPosition.x; 
    equalButtonMenuLabelPosition.y = equalButtonPosition.y - equalButton->boundingBox().size.height/2 - equalButtonMenuLabel->boundingBox().size.height; 
    equalButtonMenuLabel->setPosition(mainMenu->convertToNodeSpace(equalButtonMenuLabelPosition)); 

    mainMenu->addChild(equalButtonMenuLabel); 

私のコードを下回っている

using namespace cocos2d; 

class MainMenuLayer : public Layer 
{ 

private: 

    Size screenSize; 

    Menu *mainMenu; 

    bool init(); 

    void buttonPressedCallback(Ref *sender); 

public: 

    MainMenuLayer(); 

    ~MainMenuLayer(); 

    static MainMenuLayer *create(); 

    static CCScene *scene(); 

}; 

の問題は、私は私のゲームを実行すると、上で作成したボタンをクリックすると、ファイルtype_traitsファイルと:return (((*_STD forward<_Ty1>(_Arg1)).*_Pmf)(_STD forward<_Types2>(_Args2)...));行の例外が表示されます(下記参照)。

struct _Invoker_pmf_pointer 
    { // INVOKE a pointer to member function on a [smart] pointer 
    template<class _Decayed, 
     class _Ty1, 
     class... _Types2> 
     static auto _Call(_Decayed _Pmf, _Ty1&& _Arg1, _Types2&&... _Args2) 
     -> decltype(((*_STD forward<_Ty1>(_Arg1)).*_Pmf)(
      _STD forward<_Types2>(_Args2)...)) 
     { // INVOKE a pointer to member function on a [smart] pointer 
     return (((*_STD forward<_Ty1>(_Arg1)).*_Pmf)(
      _STD forward<_Types2>(_Args2)...)); 
     } 
    }; 

このコールバックは間違っていますか?他に誰かがこれに遭遇しましたか?

答えて

0

エラーの内容を把握しました。問題は、以前のシーンにタッチリスナーを登録していて、シーンが終了したときに削除していないということでした。

シーンを変更する前にタッチリスナーのコードを削除したところ、すべてうまくいきました。

void SplashScreenMenuLayer::onTouchesEnded(Touch* touch, Event* event) 
{ 
    Director::getInstance()->getEventDispatcher()->removeEventListener(touchListener); 
    Director::getInstance()->replaceScene(MainMenuLayer::scene()); 
}