Cocos2d-js3.3 模态对话框的实现
首先,先了解一下什么是模态对话框,百度百科的给出了下面一个定义:
模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。
游戏中经常会出现很多模态对话框,例如登陆框、提示框等等。
下面来看下效果图:
有几点值得关注的:
1.当对话框出现后,对话框外不响应触摸。
这就需要用到setSwallowTouches(),设置为true时,并且onTouchBegan返回true,就会吞没事件,不再向下传递
2.当对话框出现后,背景变暗
这里用到LayerColor的两个方法,设置颜色setColor()和设置透明度setOpacity()
下面,请看代码:
- var ModalDialogueBox = cc.LayerColor.extend({
- _listener: null,
- ctor: function() {
- this._super(cc.color.BLACK);
- this.ignoreAnchorPointForPosition(false); //忽略锚点设置为false,默认为true,锚点(0, 0)
- this.setOpacity(128); //透明度
- //初始化对话框
- this._initDialog();
- return true;
- },
- onEnter: function()
- {
- this._super();
- //监听器
- this._listener = new cc.EventListener.create({
- event: cc.EventListener.TOUCH_ONE_BY_ONE,
- swallowTouches: false,
- onTouchBegan: function(touch, event)
- {
- return true;
- }
- });
- //添加触摸监听
- cc.eventManager.addListener(this._listener, this);
- },
- //初始化对话框
- _initDialog: function()
- {
- var winSize = cc.winSize;
- //背景
- var bg = new cc.Sprite(res.dialog_png);
- bg.setPosition(cc.p(winSize.width / 2, winSize.height / 2));
- this.addChild(bg, 0, 101);
- //OK按钮
- var OKLabel = new cc.LabelTTF("OK", "Arial", 36);
- var OKMenuItem = new cc.MenuItemLabel(OKLabel, this._onCallback, this);
- OKMenuItem.setPosition(cc.p(100, 50));
- //Cancel按钮
- var cancelLabel = new cc.LabelTTF("Cancel", "Arial", 36);
- var cancelMenuItem = new cc.MenuItemLabel(cancelLabel, this._onCallback, this);
- cancelMenuItem.setPosition(cc.p(250, 50));
- //菜单
- var menu = new cc.Menu(OKMenuItem, cancelMenuItem);
- menu.setPosition(cc.p(0, 0));
- bg.addChild(menu); //注意是添加到背景里面
- this.setVisible(false); //默认设置为不可见
- },
- _onCallback: function()
- {
- this.hidden();
- },
- //弹出
- popup: function()
- {
- this.setVisible(true);
- this._listener.setSwallowTouches(true);
- var bg = this.getChildByTag(101);
- bg.setScale(0);
- var scaleTo = new cc.ScaleTo(2.0, 1);
- var rotateBy = new cc.RotateBy(2.0, 360, 0);
- var spawn = new cc.Spawn(scaleTo, rotateBy);
- bg.runAction(spawn);
- },
- //隐藏
- hidden: function()
- {
- this.setVisible(false);
- this._listener.setSwallowTouches(false);
- },
- onExit: function()
- {
- this._super();
- //移除触摸监听
- cc.eventManager.removeListeners(cc.EventListener.TOUCH_ONE_BY_ONE, true);
- }
- });
源码下载:点击打开链接
Cocos2d-js3.3 模态对话框的实现的更多相关文章
- cocos2d-x 模态对话框的实现
心情不好,恩.不扯淡了.直接讲. ================================== 在泰然看了一篇实现模态对话框的文章,写的还不错,然后在其基础上加了我简单加了一层灰色透明背景,这 ...
- cocos2dx & cocostudio 实现模态对话框
用cocos2dx实现模态对话框 http://www.cnblogs.com/mrblue/(转自于) ui部分使用了cocoStudio,注意这里没有实现怎么屏蔽其他的输入事件,其他的文档已经太多 ...
- MFC编程 | 非模态对话框的定义
因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // 非模态对话框的定义 // 通过单文档菜单调用一个非模态窗口 1.首先在工程里插入一个对话框(如:IDD_DLG_TEST ...
- bootstrap dialog 使用模态对话框
bootstrap3-dialog 使用模态对话框 <div class="modal fade"> <div class="modal-dialog& ...
- 【原创】WinForm 模态对话框
今天解决的一个问题,记录下,以备后用. 问题描述:WinForm程序有超时自动退出功能,但是有些模态对话框不关掉的话会退出失败,原因(猜测): 程序倒计时用的System.Windows.Forms. ...
- 关于easyUI的模态对话框
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址.博客园蜗牛cnblogs.com/tdws 会用easyUI的模态对话框会是我们的开发更加简洁,只需下载这个插件,把需要的文件拖到项目 ...
- 自定义AlertView实现模态对话框
在Windows应用程序中,经常使用模态(Model)对话框来和用户进行简单的交互,比如登录框.在IOS应用程序中,有时我们也希望做同样的事情.但IOS的UI库中,没有模态对话框,最接近那个样子的应该 ...
- MFC编程入门之十二(对话框:非模态对话框的创建及显示)
上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 非模态对话框显示后,程序其他窗口仍然能正常运行,可以响应用户输入,还可以相互切换.上一讲中创建的Tip模态对话框 ...
- MFC编程入门之十一(对话框:模态对话框及其弹出过程)
加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有了些解了,有个好的开始对于以后的学习大有裨益.趁热打铁,这一节讲讲什么是对话框和非模态对话框,以及模态对话框怎样弹出. 一.模态对话框和非 ...
- MFC学习笔记(一)向模态对话框传递数据
声明构造函数为2个参数,具有默认参数的参数须放在后面. CDialogDimmer::CDialogDimmer(CString name,CWnd* pParent /*=NULL*/) : CDi ...
随机推荐
- iOS 开发网络篇—监测网络状态
iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行 ...
- 基于jQuery发展历程时间轴特效代码
分享一款基于jQuery发展历程时间轴特效代码,带左右箭头,数字时间轴选项卡切换特效下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="time ...
- XSS测试代码
无script的Xss <img/src=# onerror=alert('XSS')> HTML5 XSS测试代码 <video> <source onerror=” ...
- Java根据子节点递归父节点
先上数据库结构图和树形图: 项目中的一个需求是获取一个商品所属的二级分类名称. 思路分析,首先,我们是可以拿到当前商品所属的子分类的,比如说我买的是一个iPhone SE,对应的分类名称是 iPhon ...
- 使用SecureCRT / win7远程桌面连接ubuntu配置记录(有更新)
2017-03-03 更新于末尾 1.Windows7 — Ubuntu 远程桌面连接中 Tab 键不能补全的解决办法 2.xrdp远程连接ubuntu无法使用原机的中文输入法 2017-02-22 ...
- Hadoop 2.2.0安装和配置lzo
转自:http://www.iteblog.com/archives/992 Hadoop经常用于处理大量的数据,如果期间的输出数据.中间数据能压缩存储,对系统的I/O性能会有提升.综合考虑压缩.解压 ...
- java中获取两个时间中的每一天
引入下面方法即可: /** * 获取两个时间中的每一天 * @param bigtimeStr 开始时间 yyyy-MM-dd * @param endTimeStr 结束时间 yyyy-MM-dd ...
- Mybatis面试题整理(超详细)
1.什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement ...
- python 为空判断场景
判定为空的场景: 取值为数字0.None.''.[]四种情况.
- ux.form.field.GridDate 支持快速选择日期的日期控件
效果如图,亲测6.2.1版本可用 /** *支持快速选择日期的日期控件 */ Ext.define('ux.form.field.GridDate', { extend: 'Ext.form.fiel ...