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. linux --> 删除指定目录下所有文件

    删除指定目录下所有文件 代码样例: ///////////////////////////////////////////////////// //Name: DeleteFile //Purpose ...

  2. byte[] 转Hex String

    一.一个字符串转byte数组怎么转? byte[] byteArray = String.getBytes(); 二.又想把生成的数组转回字符串怎么办? String covertString = n ...

  3. java与数据库交互常用到的一些方法

    下面我整理了一下java中常用的几个与数据库交互的常用方法,仅供参考: 1.执行SQL(dao层的实现类中) (1)SQL查询: //import org.hibernate.Query;//impo ...

  4. ECSHOP后台权限分配原理分析

    1.在权限管理->管理员列表,中添加一名管理员 2.在admin\includes\inc_menu.php $modules['02_cat_and_goods']['01_goods_lis ...

  5. php读取sqlite数据库入门实例

    php读取sqlite数据库的例子,php编程中操作sqlite入门实例.原文参考:http://www.jbxue.com/article/php/22383.html在使用SQLite前,要确保p ...

  6. Hibernate 的一级缓存和二级缓存总结

    缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache.缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更快 ...

  7. mysqldump 导出数据库为DBname的表名为Tname的表结构 导出数据库的所有表的表结构

    mysqldump -uroot -p password -d DBname Tname >db.sql #关建点是"-d"参数 导出数据库的所有表的表结构 mysqldum ...

  8. angular学习笔记(五)-阶乘计算实例(2)

    <!DOCTYPE html> <html ng-app> <head> <title>2.3.3计算阶乘实例2</title> <m ...

  9. ny643 发短信 stl库 map函数

    发短信 时间限制:1000 ms  |            内存限制:65535 KB 难度:3           描述 下图是手机常用的九键英文输入法界面,如果要输入字母'A',我们只 需要按一 ...

  10. 20个angularjs开发工具

    AngularJS是那些渴望以动态方式来设计web app的web开发人员最偏爱的框架之一.如果你是一个希望启动AngularJS项目的开发人员,那么你可能需要帮助来挑选出趁手的工具…… 在Value ...