2017-05-13 22 views
0

次のコードがあり、一時停止メニューでmoreButtonをクリックしたときに関数を呼び出す必要があります。しかし、ボタンを押してもメソッドを呼び出すことができません。ゲーム全体が一時停止している可能性があります。何か不足していますか?私はあなたから聞くのが大好きです! Menuなしcocos2dxの一時停止メニューで一時停止中にメソッドを呼び出すことができません

auto pauseLayer=LayerColor::create(Color4B::BLACK, WINSIZE.width, WINSIZE.height); 
auto pauseLabel=Label::createWithTTF("Paused", "fonts/Marker Felt.ttf", 24); 
pauseLabel->setPosition(WINSIZE.width/2.0, WINSIZE.height/ 2.0); 
pauseLayer->addChild(pauseLabel); 
// Add your required content to pauseLayer like pauseLabel 

pauseLayer->setVisible(false); 
pauseLayer->setOpacity(220); // so that gameplay is slightly visible 
addChild(pauseLayer, ZOrder::Level); 

auto pauseButton = MenuItemImage::create("CloseNormal.png","CloseSelected.png",[pauseLayer](Ref*sender){ 
      if(!Director::getInstance()->isPaused()) { 
         Director::getInstance()->pause(); 
         pauseLayer->setVisible(true); 
         auto moreButton = MenuItemImage::create("more.png","more.png","more.png",[](Ref*sender){ 
            std::string url = "https://play.google.com/store/xxx"; 
            cocos2d::Application::getInstance()->openURL(url); 
            }); 
            moreButton->setPosition(WINSIZE.width/2.0, WINSIZE.height/ 2.0+50); 
            pauseLayer->addChild(moreButton, ZOrder::Level); 
          pauseLayer->addChild(moreButton); 
        } else { 
         Director::getInstance()->resume(); 

         pauseLayer->setVisible(false); 
        } 
     }); 

auto menu = Menu::create(pauseButton, NULL); 
menu->setPosition(WINSIZE.width/2.0, WINSIZE.height - 50); 
addChild(menu, ZOrder::Level); 

答えて

1

MenuItemシーンをしません。 moreButtonをMenuItemとして作成していて、レイヤーとして子として追加しています。

Buttonを試してみませんか?

あなたのコードによれば、一時停止をクリックするたびに一時停止レイヤーを作成しないので、一時停止をタッチするたびにmoreButtonを作成しないでください。一度作成して一時停止レイヤーに追加すると、そのレイヤーの可視性。

// Add your required content to pauseLayer like pauseLabel 

auto moreButton = cocos2d::ui::Button::create("more.png"); 
moreButton->setPosition(Vec2(100,100)); 
moreButton->addClickEventListener([](Ref*){ 
     std::string url = "https://play.google.com/store/xxx"; 
     cocos2d::Application::getInstance()->openURL(url); 
    }); 

pauseLayer->addChild(moreButton); 

とラムダ関数内moreButtonコードを削除します。

auto pauseButton = MenuItemImage::create("CloseNormal.png","CloseSelected.png",[pauseLayer](Ref*sender){ 
      if(!Director::getInstance()->isPaused()) { 
        Director::getInstance()->pause(); 
        pauseLayer->setVisible(true); 

      } else { 
        Director::getInstance()->resume(); 
        pauseLayer->setVisible(false); 
      } 
     }); 
0
Problem is that you are using menuitem and adding it to Layer and also twice:- 

     pauseLayer->addChild(moreButton, ZOrder::Level); 
     pauseLayer->addChild(moreButton); 

    This will throw exception of child already added. 

    You just simply need to add moreButton on Menu. 

    Following code should work:- 

    auto pauseLayer=LayerColor::create(Color4B::BLACK, WINSIZE.width, WINSIZE.height); 
    auto pauseLabel=Label::createWithTTF("Paused", "fonts/Marker Felt.ttf", 24); 
    pauseLabel->setPosition(WINSIZE.width/2.0, WINSIZE.height/ 2.0); 
    pauseLayer->addChild(pauseLabel); 
    // Add your required content to pauseLayer like pauseLabel 

    pauseLayer->setVisible(false); 
    pauseLayer->setOpacity(220); // so that gameplay is slightly visible 
    addChild(pauseLayer, ZOrder::Level); 

    auto pauseButton = MenuItemImage::create("CloseNormal.png","CloseSelected.png",[pauseLayer](Ref*sender){ 
       if(!Director::getInstance()->isPaused()) { 
          Director::getInstance()->pause(); 
          pauseLayer->setVisible(true); 
          auto moreButton = MenuItemImage::create("more.png","more.png","more.png",[](Ref*sender){ 
             std::string url = "https://play.google.com/store/xxx"; 
             cocos2d::Application::getInstance()->openURL(url); 
             }); 
             moreButton->setPosition(WINSIZE.width/2.0, WINSIZE.height/ 2.0+50); 

auto menu = Menu::create(moreButton, NULL); 
pauseLayer->addChild(menu, ZOrder::Level); 

         } else { 
          Director::getInstance()->resume(); 

          pauseLayer->setVisible(false); 
         } 
      }); 

    auto menu = Menu::create(pauseButton, NULL); 
    menu->setPosition(WINSIZE.width/2.0, WINSIZE.height - 50); 
    addChild(menu, ZOrder::Level); 
+0

あなたは2つの異なるセクションに説明し、コード例を分ける必要があります –

関連する問題