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)

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


  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 洁净数
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    20. Valid Parentheses
    290. Word Pattern
    205. Isomorphic Strings
    71. Simplify Path
  • 原文地址:https://www.cnblogs.com/vokie/p/3602054.html
Copyright © 2011-2022 走看看