点击任意位置关闭(CocosCreator)

举报
爱上游戏开发 发表于 2022/07/02 01:02:11 2022/07/02
【摘要】 推荐阅读:  我的CSDN 我的博客园 QQ群:704621321       今天...

推荐阅读:

      今天,接触到一个新功能,当弹出某个弹框时,需要点击除弹框的剩余任意位置,来关闭该弹框,例如:当红框内容显示时,点击红框外任意位置可关闭红框。在这里插入图片描述
      刚开始做这个功能时,第一想法:
      判断点击的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;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

3.显示弹框时

//打开弹框
    openMyBox() {
        var self = this;
        
    self.uiRoot.myBox.active = true;
    self.uiRoot.anyPos.active = true;
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其实该功能挺简单的,代码几行就是实现了,也不难理解。

文章来源: unity3d.blog.csdn.net,作者:爱上游戏开发,版权归原作者所有,如需转载,请联系作者。

原文链接:unity3d.blog.csdn.net/article/details/94551278

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。