点击任意位置关闭(CocosCreator)
推荐阅读:
今天,接触到一个新功能,当弹出某个弹框时,需要点击除弹框的剩余任意位置,来关闭该弹框,例如:当红框内容显示时,点击红框外任意位置可关闭红框。

刚开始做这个功能时,第一想法:
判断点击的UI不是该弹框UI,改功能只需要一个if语句就能实现,这时候我发现有两个困难点,1:如何判断点击的UI是否是目标弹框;2:使用该方法,需要为除弹框外的整个UI界面添加监听事件,由于开始搭建UI的时候没有考虑这种情况,所以要为除弹框外的整个UI界面添加监听事件就特别繁杂。
为此,我果断放弃了这种方法,我又寻找到另一种方法:可不可以添加一个屏幕大小的透明Button,当弹框弹出来时,显示Button,为Button添加一个监听事件:关闭弹框。但是我又发现问题,以前用U3D的事件,点击事件具有穿透效果,当弹框弹出来时,Button也显示,这样会造成点击弹框上某UI,也会触发Button的监听事件。
当然,这只是根据自己的开发经验推测的,由于暂时没想到其他方法,我还是尝试了一下,发现cocos并不存在事件的穿透。所以,在你走头无路的时候,需要用于尝试,有时候,你和成功只差一步:动手实践。
接下来。讲讲我的实现过程吧
1.在弹框的上面一个层级,新建一个透明Button,命名为:anyPos
2.为anyPos添加监听事件
// 查找btn
var findBtn = function (str, prt, call, bAudio = true) {
var obj = cc.find(str, prt);
obj.on("click", function () {
if (bAudio) { gm.HallAudio.playClick(); }
call();
}, this);
return obj;
};
//任意位置按钮
uiRoot.anyPos = findBtn("anyPos", obj3, function () {
self.uiRoot.myBox.active = false;//隐藏弹框
self.uiRoot.anyPos.active = false;//隐藏anyPos
})
//默认anyPos为隐藏的
self.uiRoot.anyPos.active = false;
3.显示弹框时
//打开弹框
openMyBox() {
var self = this;
self.uiRoot.myBox.active = true;
self.uiRoot.anyPos.active = true;
}
其实该功能挺简单的,代码几行就是实现了,也不难理解。
点击任意位置关闭(CocosCreator)的更多相关文章
- Android点击其他任意位置收起软键盘
在Android应用开发中,经常出现这样的需求,用户在输入文字的过程中,可能不想继续输入了,通过滑动或者点击其他位置(除软键盘和EditText以外的任何位置),希望能够自动收回键盘,这个功能可能有些 ...
- vb6源码后台点击任意窗口指定坐标XY位置,支持FLASH和一般的游戏
vb6源码后台点击任意窗口指定坐标XY位置,支持FLASH和一般的游戏,支持每个网页用不同的IP登陆,支持多线程自动点击 适合自动打怪,游戏练级,配合自动识图功能,自动验证码技术,可以实现更多功能. ...
- [转载]GridView中点击某行的任意位置就选中该行
原文链接:http://www.cnblogs.com/Echo529/p/4521701.html GridView中点击某行的任意位置就选中该行 分类: 第一步:添加选择列 点击GridView右 ...
- GridView中点击某行的任意位置就选中该行
GridView中点击某行的任意位置就选中该行 -- :: 分类: 第一步:添加选择列 点击GridView右边小尖头,双击CommandField,选中"选择",添加,将起设置为不可见: 第二步:处 ...
- js进阶 12-15 jquery如何实现点击button显示列表,点击其它位置隐藏列表
js进阶 12-15 jquery如何实现点击button显示列表,点击其它位置隐藏列表 一.总结 一句话总结:在button中阻止事件冒泡. 1.如何咋button中阻止事件冒泡(两种方法)? ev ...
- JS点击任意标签获得该标签属性,以获得ID为例,以及AJAX的异步原理和 $(document).ready()与window.onload加载方法的区别
js代码: //$(document).click(function (e) { // 在页面任意位置点击而触发此事件 // var select = ""; // var i = ...
- iOS利用响应链机制点击tableview空白处关闭键盘-可以作为参考
http://www.jianshu.com/p/9717b792599c 是原文地址 处理关闭键盘的做法一般分为两种:1.放弃第一响应者身份:2.当前视图结束编辑.通常情况下只要我们在合适的时机 ...
- Java swing 如何将一个按钮放置到弹出框框的任意位置?(Absolute layout 布局的使用)
准备: Absolute layout 绝对布局,绝对布局中控件的可以在任意位置放置 如何制作下面那种样子的 弹出框? ---------------------------------------- ...
- 一个I/O线程可以并发处理N个客户端连接和读写操作 I/O复用模型 基于Buf操作NIO可以读取任意位置的数据 Channel中读取数据到Buffer中或将数据 Buffer 中写入到 Channel 事件驱动消息通知观察者模式
Tomcat那些事儿 https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650860016&idx=2&sn=549 ...
随机推荐
- RabbitMQ 实践之在处理异步任务中的流程
一.背景: 我司的系统,用户可以创建任务,启动任务,但任务的运行需要很长的时间,所以采用消息队列的方式,后台异步处理. 这里所用到的是 RabbitMQ . 二.MQ 处理任务的流程 ① ② ③ ④ ...
- 2019前端面试系列——JS面试题
判断 js 类型的方式 1. typeof 可以判断出'string','number','boolean','undefined','symbol' 但判断 typeof(null) 时值为 'ob ...
- DFS_全球变暖_蓝桥杯2018省赛N0.9
你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. .. ...
- Java 第四章
switch选择结构 语法:switch(表达式){ case 常量 1: //代码块1: break: case 常量 2: //代码块2: break: ...... default ...
- 【MySQL】目录、文件权限问题
详情如下: $ cat /usr/local/mysql/data/Phoenix-slow.log cat: /usr/local/mysql/data/Phoenix-slow.log: Perm ...
- 接口测试时遇到 java 代码加密请求数据,用 python 的我该怎么办?
前言 自动化测试应用越来越多了,尤其是接口自动化测试. 在接口测试数据传递方面,很多公司都会选择对请求数据进行加密处理. 而目前为主,大部分公司的产品都是java语言实现的.所以加密处理也是java实 ...
- 恐怖的Hibernate和JavaFX Table CallBack!
目录 [隐藏] 1 Hibernate 2 JavaFX Table Hibernate 最近在做 JavaFX 应用,不管再怎么避免数据持久化,但面对几十万的数据量的时候也只能乖乖的去配置持久层框架 ...
- Activiti6系列(3)- 快速体验
一.部署启动activiti 1.部署,将两个war包拷贝到Tomcat下即可. 2.启动tomcat,访问http://127.0.0.1:8080/activiti-app 默认账号密码:admi ...
- MyBatis之#{} and ${}
#{} 和 ${} 之间最大的差别就是 #{}会在使用的时候被加上 ‘’ 引号, ${}直接传值,不做任何处理 1.#{}对传入的参数会做预编译,也就是会当做字符串来处理 select * from ...
- Java虚拟机(一)-Java内存区域
通过看深入理解java虚拟机这本书,大致总结一些笔记,或者提出一些问题,希望大家深入交流学习,第一次写博客,大家多多支持 Java虚拟机对于很多Java开发人员每天都在用,但是大部分人初学者对这些并不 ...