zoukankan      html  css  js  c++  java
  • 关于quick-2dx多层Layer堆叠触摸事件穿透

    开发过程中,在一个场景上添加了多个层以后,会使触摸事件从上层全部传递到底层响应所有相关控件。所以我们需要截断这个触摸事件.

    必须对quick2dx的层传递机制有个了解。官网地址:http://cn.quick-x.com/?p=1504

    触摸的事件传递是从上层向下层出发的。游戏开发过程中,对场景层的管理要很清晰。比如一个场景下到底有多少个层,层与层之间谁高谁低.

    首先确保场景的唯一性,也就是只创建唯一的场景来显示多层layer,不能把scene与layer之间的概念给混淆了。

    唯一的场景可以有很多的layer堆叠在上面的,但是作为一个功能齐全(有触摸监听)的场景,需要至少一个自身创建的layer添加到场景中.

    因为有关于监听的事件,都是在Layer中进行添加并监听的。

    强烈不建议将显示层的东西(Sprite,MenuItemImage,Menu..)添加到场景(like this: scenes:addChild(sprite))

    正确的做法是在刚刚创建场景的时候,我们有创建一个默认层,将所有的显示层的东西都应该添加到这个默认层中

    然后我们可能需要弹出一个Layer覆盖在前一个Layer上面,弹出过程需要做的处理是:

    把场景的默认Layer的监听给setTouchEnabled(false)掉(避免防止上层的layer点击事件下层的layer也可以接收到引起的触摸穿透。),

    new一个新的Layer,记得在新的Layer的构造函数中把那唯一的场景作为参数传递进去。

    因为在移走上层layer时,下层layer需要使用场景(scenes),像这样操作(callbackScene.layer:setTouchEnabled(true))打开原有的监听,

    不能上层layer移走了,下层layer监听没了,不响应触摸事件了。

    至于对象的添加是要有条理的,不能在层变多变复杂的时候,对层上的精灵的添加出现混乱问题。同样监听也同样需要条理

    先看如何在场景里面创建默认的层,然后在默认的层上添加监听,这样就可以实现对屏幕的监听,代码如下:

    需要注意的是:打开默认self.layer的监听,如下:

    这时我们需要加载第二层,大概如下:

    local secondLayer = require("scenes.ItemLayer").new(self)

    不过需要注意的是:添加第二层时,把穿透问题避免掉,如下:

    self.layer:setTouchEnabled(false)

    这样,默认层就不会接收事件了。

    可以看到我这里传了一个self值,这个值就是MainScene的值,也就是把主场景的self传递给了第二层Layer,

    第二层Layer的大概构造函数可以这样写:(主要是为了传递主场景的引用过来)


    然后,我们移走第二层,这时需要把默认第一层的layer监听给打开,

    这时用到我们刚刚传进来的主场景引用实例了,

    代码这样写:

    mainScene.layer:setTouchEnabled(true)

    这样就可以完成层与层间的触摸穿透问题了。


  • 相关阅读:
    设置ios中imageView图片自适应,
    IOS应用之间调用
    XCode debug中添加查找debug和控制台的办法
    初学Java scirpt(判断、循环语句)
    Java Script 字符串操作
    初学 Java Script (算数运算及逻辑术语)
    Ubuntu 配置JDK
    SQL Server 跨库复制表方法小笔记
    Ubuntu 重装 mysql
    Java Script 数组操作
  • 原文地址:https://www.cnblogs.com/vokie/p/3602054.html
Copyright © 2011-2022 走看看