首先,先了解一下什么是模态对话框,百度百科的给出了下面一个定义:

模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。

游戏中经常会出现很多模态对话框,例如登陆框、提示框等等。

下面来看下效果图:

有几点值得关注的:

1.当对话框出现后,对话框外不响应触摸。

这就需要用到setSwallowTouches(),设置为true时,并且onTouchBegan返回true,就会吞没事件,不再向下传递

2.当对话框出现后,背景变暗

这里用到LayerColor的两个方法,设置颜色setColor()和设置透明度setOpacity()

下面,请看代码:

  1. var ModalDialogueBox = cc.LayerColor.extend({
  2. _listener: null,
  3. ctor: function() {
  4. this._super(cc.color.BLACK);
  5. this.ignoreAnchorPointForPosition(false);   //忽略锚点设置为false,默认为true,锚点(0, 0)
  6. this.setOpacity(128);       //透明度
  7. //初始化对话框
  8. this._initDialog();
  9. return true;
  10. },
  11. onEnter: function()
  12. {
  13. this._super();
  14. //监听器
  15. this._listener = new cc.EventListener.create({
  16. event: cc.EventListener.TOUCH_ONE_BY_ONE,
  17. swallowTouches: false,
  18. onTouchBegan: function(touch, event)
  19. {
  20. return true;
  21. }
  22. });
  23. //添加触摸监听
  24. cc.eventManager.addListener(this._listener, this);
  25. },
  26. //初始化对话框
  27. _initDialog: function()
  28. {
  29. var winSize = cc.winSize;
  30. //背景
  31. var bg = new cc.Sprite(res.dialog_png);
  32. bg.setPosition(cc.p(winSize.width / 2, winSize.height / 2));
  33. this.addChild(bg, 0, 101);
  34. //OK按钮
  35. var OKLabel = new cc.LabelTTF("OK", "Arial", 36);
  36. var OKMenuItem = new cc.MenuItemLabel(OKLabel, this._onCallback, this);
  37. OKMenuItem.setPosition(cc.p(100, 50));
  38. //Cancel按钮
  39. var cancelLabel = new cc.LabelTTF("Cancel", "Arial", 36);
  40. var cancelMenuItem = new cc.MenuItemLabel(cancelLabel, this._onCallback, this);
  41. cancelMenuItem.setPosition(cc.p(250, 50));
  42. //菜单
  43. var menu = new cc.Menu(OKMenuItem, cancelMenuItem);
  44. menu.setPosition(cc.p(0, 0));
  45. bg.addChild(menu);      //注意是添加到背景里面
  46. this.setVisible(false);     //默认设置为不可见
  47. },
  48. _onCallback: function()
  49. {
  50. this.hidden();
  51. },
  52. //弹出
  53. popup: function()
  54. {
  55. this.setVisible(true);
  56. this._listener.setSwallowTouches(true);
  57. var bg = this.getChildByTag(101);
  58. bg.setScale(0);
  59. var scaleTo = new cc.ScaleTo(2.0, 1);
  60. var rotateBy = new cc.RotateBy(2.0, 360, 0);
  61. var spawn = new cc.Spawn(scaleTo, rotateBy);
  62. bg.runAction(spawn);
  63. },
  64. //隐藏
  65. hidden: function()
  66. {
  67. this.setVisible(false);
  68. this._listener.setSwallowTouches(false);
  69. },
  70. onExit: function()
  71. {
  72. this._super();
  73. //移除触摸监听
  74. cc.eventManager.removeListeners(cc.EventListener.TOUCH_ONE_BY_ONE, true);
  75. }
  76. });

源码下载:点击打开链接

Cocos2d-js3.3 模态对话框的实现的更多相关文章

  1. cocos2d-x 模态对话框的实现

    心情不好,恩.不扯淡了.直接讲. ================================== 在泰然看了一篇实现模态对话框的文章,写的还不错,然后在其基础上加了我简单加了一层灰色透明背景,这 ...

  2. cocos2dx & cocostudio 实现模态对话框

    用cocos2dx实现模态对话框 http://www.cnblogs.com/mrblue/(转自于) ui部分使用了cocoStudio,注意这里没有实现怎么屏蔽其他的输入事件,其他的文档已经太多 ...

  3. MFC编程 | 非模态对话框的定义

    因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // 非模态对话框的定义 // 通过单文档菜单调用一个非模态窗口 1.首先在工程里插入一个对话框(如:IDD_DLG_TEST ...

  4. bootstrap dialog 使用模态对话框

    bootstrap3-dialog 使用模态对话框 <div class="modal fade"> <div class="modal-dialog& ...

  5. 【原创】WinForm 模态对话框

    今天解决的一个问题,记录下,以备后用. 问题描述:WinForm程序有超时自动退出功能,但是有些模态对话框不关掉的话会退出失败,原因(猜测): 程序倒计时用的System.Windows.Forms. ...

  6. 关于easyUI的模态对话框

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址.博客园蜗牛cnblogs.com/tdws 会用easyUI的模态对话框会是我们的开发更加简洁,只需下载这个插件,把需要的文件拖到项目 ...

  7. 自定义AlertView实现模态对话框

    在Windows应用程序中,经常使用模态(Model)对话框来和用户进行简单的交互,比如登录框.在IOS应用程序中,有时我们也希望做同样的事情.但IOS的UI库中,没有模态对话框,最接近那个样子的应该 ...

  8. MFC编程入门之十二(对话框:非模态对话框的创建及显示)

    上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 非模态对话框显示后,程序其他窗口仍然能正常运行,可以响应用户输入,还可以相互切换.上一讲中创建的Tip模态对话框 ...

  9. MFC编程入门之十一(对话框:模态对话框及其弹出过程)

    加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有了些解了,有个好的开始对于以后的学习大有裨益.趁热打铁,这一节讲讲什么是对话框和非模态对话框,以及模态对话框怎样弹出. 一.模态对话框和非 ...

  10. MFC学习笔记(一)向模态对话框传递数据

    声明构造函数为2个参数,具有默认参数的参数须放在后面. CDialogDimmer::CDialogDimmer(CString name,CWnd* pParent /*=NULL*/) : CDi ...

随机推荐

  1. 关于VMware Linux 虚拟机忘记root 密码找回

    因为昨天新安装过虚拟机设置了新的密码,再加上我好长时间没有用自己旧的虚拟机,导致忘记了密码,原来虽然知道在单用模式下,找回密码,但是确实是自己从来都没有做过,还好我们组大手飞翔哥告诉了我,怎么找回ro ...

  2. sql server中的用户临时表和全局临时表的区别

    临时表分为: 本地临时表,仅限于当前访问者访问,创建方法去如下:create table #TableName(表结构)储存于数据库tempdb内(硬盘),当前用户断开连接(把当前的),自动删除如果使 ...

  3. Paxos 实现日志复制同步(Basic Paxos)

    Paxos 实现日志复制同步 本篇文章以 John Ousterhout(斯坦福大学教授) 和 Diego Ongaro(斯坦福大学获得博士学位,Raft算法发明人) 在 Youtube 上的讲解视频 ...

  4. SudaMod-81.0 / crDroidAndroid-8.1(android-8.1.0_r20)红米3 2018年5月3日更新

    一.写在前面 我只是个人爱好,本ROM未集成任何第三方推广软件,我只是喜欢把好的资源分享出来,若可以,我们一起学习,一起进步. 请不要问我怎么刷机! 请不要问我玩游戏卡不卡(有钱你就换好点的手机)! ...

  5. 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)

    一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...

  6. JAVA并发理论与实践

    JDK5.0中更灵活.更具可伸缩性的锁定机制 流行的原子 非阻塞算法简介

  7. springboot项目使用拦截器修改/添加前端传输到后台header和cookie参数

    本质上来讲,request请求当中的参数是无法更改的,也不能添加或者删除. 但在后台程序中,一般对request的参数的操作,都是通过request的getParameter.getParameter ...

  8. Javascript 变量、函数的声明

    javascript变量 全局变量和局部变量    按照变量的作用域来区分,和大多数编程语言类似,javascript变量也分为全局变量和局部变量.全局变量的作用域是整个js文件,而局部变量的作用域是 ...

  9. C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html

    简介 现在越来越多的场景需要我们使用网络爬虫,抓取相关数据便于我们使用,今天我们要讲的主角Html Agility Pack是在爬取的过程当中,能够高效的解析我们抓取到的html数据. 优势 在.NE ...

  10. 升级 Glide 4.0 版本相关配置

    http://blog.csdn.net/hexingen/article/details/72578066 http://blog.csdn.net/hexingen/article/details ...