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

关于Cocos2d-x中增加暂停按钮的步骤的更多相关文章

  1. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox增加自定义按钮的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

  2. javascrit2.0完全参考手册(第二版) 第1章第1节 在XHTML文档中增加javascript

    通常,向文档中增加script脚本使用<script>元素,在HTML中增加脚本的方式有4中: (1)放到<script></script>块中: (2)<s ...

  3. 在WPS绿色版中增加自定义皮肤

    在WPS绿色版中增加自定义皮肤小俊的博客:http://xiaojun911.com/WPS绿色版:http://xiaojun911.com/xiazai/469.html小俊精简的WPS2016 ...

  4. Odoo8模块中增加延时自动消失的提示

    在odoo中,如果必要栏位没有值,在保存时右上角会有如下图的提示,该提示会延时并自动关闭. 有网友问如何在自己的模块中增加这样的提示,以方便用户在操作时,能提示一些必要的信息.下面例出大致的步骤以供参 ...

  5. Odoo8在TreeView左上角增加自定义按钮以及通过继承生成自定义的View_Mode

    今天有网友在问怎么在TreeView左上角增加一个自定义的按钮,在查询Odoo 自带的模块,发现在purchase_requisition中有使用,并且此模块还应用到了自定义View_Mode的情况, ...

  6. Flutter实战视频-移动电商-57.购物车_在Model中增加选中字段

    57.购物车_在Model中增加选中字段 先修改model类 model/cartInfo.dart类增加是否选中的属性 修改provide 修改UI部分pages/cart_page/cart_it ...

  7. 在博客中增加自己的live2d纸片人模型方法

    目录 在博客中增加自己的live2d纸片人模型 准备工具 使用步骤 附件 在博客中增加自己的live2d纸片人模型 准备工具 github仓库:存放live2d模型和json文件 如果你的博客支持本地 ...

  8. jeecg Online表单开发中新增自定义按钮

    要求:给表单增加一个“确认”按钮,按钮功能更改选中数据的flag字段为1 点击“自定义按钮”,录入一个“确认”按钮 按钮编码:该编码在一个智能表单配置中唯一,该编码同时是按钮触发的JS函数名.例如:按 ...

  9. Vue&Element开发框架中增加工作流处理,工作流的各个管理页面的界面处理

    我在起前面的几篇随笔中,大概介绍了工作流的一些场景化处理,包括如何把具体业务表单组件化,并在查看和编辑界面中,动态加载组件内容,以及对于查看申请单的主页面,把审批.取消.发起会签.会签.批示分阅.阅办 ...

随机推荐

  1. PLSQL_统计信息系列01_统计信息的概念和重要性

    2014-12-18 Created By BaoXinjian

  2. linux write系统调用如何实现

    在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使用文件那样向设备传送数据.可是为什么用户使用write函数就可以把数据写到设备里面去,这个过程到底是怎么实现的呢 ...

  3. 兔子--eclipse设置编码格式

    设置编码格式 a:设置eclipse的默认编码格式:window->preferences->Workspace->Text File Encoding b:设置单个项目的编码格式: ...

  4. Java JNI的具体介绍

    JNI就是Java Native Interface的简称,也就是java本地接口.它提供了若干的API实现了和Java和其它语言的通信(主要是C&C++).也许不少人认为Java已经足够强大 ...

  5. log4j 输出到 数据库

    # LOG4J配置 log4j.rootCategory=ERROR,stdout,errorfile,jdbc # 控制台输出 log4j.appender.stdout=org.apache.lo ...

  6. xdebug 安装及使用规则

    参考:http://blog.csdn.net/21aspnet/article/details/7047191 http://www.nowamagic.net/librarys/veda/deta ...

  7. eclipse中maven项目部署到tomcat [转]

    其实maven项目部署到tomcat的方式很多,我从一开始的打war包到tomcat/webapps目录,到使用tomcat-maven插件,到直接使用servers部署,一路来走过很多弯路. 下面就 ...

  8. angular学习笔记(十四)-$watch(4)

    如果需要同时监测多个属性或者对象,并且执行的是同样的回调,可以有两种选择: 1. 监测这些属性连接起来之后的值: $scope.$watch('objOne.a+objTwo.b+...', watc ...

  9. Wamp错误: Forbidden You don't have permission to access / on this server.

    找到php的配置文件httpd.conf(找不到的话看这篇:http://www.cnblogs.com/liulangmao/p/3569807.html) 在原有的位置文件中找到配置节 <D ...

  10. 如何让在Html中特殊字符被数据加载时对于html标签的自动转义 补充

    1.将此过滤器添加到ng-bind-html所绑定的数据中,便实现了在数据加载时对于html标签的自动转义. <div ng-repeat="item in list" &g ...