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);
      }
    }

  • 相关阅读:
    为Internal页面添加一个Unit Test的运行入口
    使用 AWSTATS 来查看IIS/iisnode 日志
    用issnode+IIS来托管NodeJs Server之四:支持Debug
    Restify实践
    Mocha实践
    Graphite实战
    StatsD与Graphite联合作战
    单元测试
    NHibernate配置
    NHibernate概念
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5806421.html
Copyright © 2011-2022 走看看