zoukankan      html  css  js  c++  java
  • 关于Cocos2d-x中增加暂停按钮的步骤

    1.在GameScene.cpp的init方法中先定义一个里面放着可变换并在变换的时候会响应事件的MenuItem的Menu,这个Menu里面的可变换MenuItem又由两个小MenuItem组成,每个小MenuItem都有两种状态,一种是正常的状态,还有一种是按下去的状态。

    //加入暂停按钮
    auto pause_sp1 = Sprite::create("jewel1.png");
    auto pause_sp2 = Sprite::create("jewel2.png");
    auto resume_sp1 = Sprite::create("jewel4.png");
    auto resume_sp2 = Sprite::create("jewel6.png");

    auto pauseitem = MenuItemSprite::create(pause_sp1, pause_sp2);
    auto resumeitem = MenuItemSprite::create(resume_sp1, resume_sp2);
    auto pauseButton = MenuItemToggle::createWithTarget(this, menu_selector(GameScene::pauseButtonCallBack), pauseitem, resumeitem, nullptr);
    pauseButton->setAnchorPoint(Vec2(0, 0));

    //注意,这里的Position如果没有设置好的话,是不会显示暂停按钮的,而且这里的Position的设置比较特殊,设置的位置是以屏幕左下四分之一和另外看不见的四分之三为一个设置区域,等到添加到Menu中去的时候,会自动适应屏幕,变成原来左下四分之一移动到了屏幕右上四分之一,整体往屏幕左上移动了四分之一屏幕大小的距离,所以有的时候看不见按钮是因为没有设置好Position的关系
    pauseButton->setPosition(Vec2(size.width / 2 - pauseButton->getContentSize().width, size.height / 2 - pauseButton->getContentSize().height)); //位于右上角

    auto menu = Menu::create(pauseButton, nullptr);
    addChild(menu, 10, PAUSE_MENU);

    2.写可变换MenuItem的响应事件

    void GameScene::pauseButtonCallBack(Ref* pSender)
    {
      //log("press pause button!");

      /*
      * 暂停/开启 步骤:
      *1.关闭/开启 触摸监听
      *2.遍历子节点,把除了暂停按钮的 关闭/开启 渲染(onExit)
      *3.关闭/开启 敌机的刷新schedule
      *4.关闭/开启 物理引擎的模拟
      */
      log("Im in the ff!!");
      static int i = 0;
      if (0 == i)
      {
        i = 1;

        _eventDispatcher->pauseEventListenersForTarget(this);
        auto vec = this->getChildren();
        for (auto &child : vec)
        {
          if (child->getTag() != PAUSE_MENU)
          child->onExit();
        }

      //unschedule(schedule_selector(GameScene::refreshAnEnemy));
      unscheduleUpdate();

      ((Scene*)this->getParent())->getPhysicsWorld()->setAutoStep(false);

      }
      else
      {
        i = 0;

        _eventDispatcher->resumeEventListenersForTarget(this);

        auto vec = this->getChildren();
        for (auto &child : vec)
        {
          if (child->getTag() != PAUSE_MENU)
          child->onEnter();
        }

        //schedule(schedule_selector(GameScene::refreshAnEnemy), refresh_delay[m_level]);
        scheduleUpdate();

        ((Scene*)this->getParent())->getPhysicsWorld()->setAutoStep(true);
      }
    }

  • 相关阅读:
    在实践中不断总结和提升
    [转]态度的魔力 Net
    回答的智慧 Net
    [转] 【领导必读】唐僧为什么可以领导孙悟空 Net
    [转载]人生感悟:8个笑话 8味人生 Net
    人生成功的十大说话技巧 Net
    最新人生感悟语句摘选 Net
    2012注定是收获的一年,奋斗才刚刚开始
    程序员职业发展的绊脚石思想的枷锁
    AgileEAS.NET5.0界面设计器使用说明书(上)
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5806421.html
Copyright © 2011-2022 走看看