博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Cocos2d-x中增加暂停按钮的步骤
阅读量:6939 次
发布时间:2019-06-27

本文共 2128 字,大约阅读时间需要 7 分钟。

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

  }
}

 

转载地址:http://slfnl.baihongyu.com/

你可能感兴趣的文章
java POI Excel 单元格样式
查看>>
【原】iOS学习之UITabBar的隐藏
查看>>
【译】.NET Core 是 .NET 的未来
查看>>
关于输入流与输出流
查看>>
MVC分页控件
查看>>
虚拟机Ping不通主机解决
查看>>
Asp.Net 上传大文件
查看>>
HttpClient使用详解
查看>>
Wijmo 更优美的jQuery UI部件集:发现 Wijmo
查看>>
你敢不敢打破“无形门”
查看>>
美国政府提出下一步网络空间安全建设的三项重点工作
查看>>
我的VMware认证设计专家(VCDX)之路
查看>>
cocos2d-x中Node中重要的属性
查看>>
IDC:中国安全市场发展潜力巨大
查看>>
浅谈下一代Windows Server的RDS
查看>>
MySQL日志审计 帮你揪出内个干坏事儿的小子
查看>>
PureFTPD配置指南
查看>>
存储虚拟化技术之解读
查看>>
VMware View 5.0从菜鸟到高手系列 10 –远程图形工作站配置篇
查看>>
《VMware虚拟化与计算应用案例详解》第三次印刷!
查看>>