【群.讨论】cocos creator 事件冒泡,必须要在子节点监听事件么?

问题现象如下:
在Canvas的脚本中注册事件
this.node.on(cc.Node.EventType.MOUSE_DOWN, this.canvasClick, this, true)
用来监听子节点的鼠标点击事件
```javascript

   canvasClick(event: cc.Event) {
    let node: cc.Node = event.target; //?? 判断节点类型
    let nodeBlock = node.getComponent("block");
    if (nodeBlock !=null && !nodeBlock.isSamll) {
        this.addSmallBlockByBigBlock(nodeBlock);
        node.destroy();
    }
}
然而,如果我不在子节点注册同样的事件,我上边的代码将接收不到来自子节点事件,子节点注册事件如下
`this.node.on(cc.Node.EventType.MOUSE_DOWN, event => { console.log(event) }, this);`
creator的事件冒泡特性和js是否有一定的区别?至少我在 ul 上注册事件时,我不需要显示的在li上也注册一个没用的事件。
**WX群**,需要进群,添加微信回复 cocos
<img src="/uploads/default/original/3X/3/a/3aedfddb3c8b7d309cc426bce48fd8a9b7ce3431.jpg" width="300" >

不要沉了

用一下这个 this.display.mapRoot.on(cc.Node.EventType.TOUCH_START, this.onTouch,this)

display.mapRoot 请问是你的自定义属性么 ?

mapRoot 就是一个node

this.node.on(cc.Node.EventType.MOUSE_DOWN, this.canvasClick, this, true),那和这个就没有什么不同的地方了?除了最后一个参数外(这个参数ture或false都没影响)?我这个就是在父级节点注册的。

我之前的消消乐就是用的这个

那你点击消除的事件,是注册要消除的块上?还是注册在装这些要消除块的容器节点上呢?

父节点上就ok了

能否提供下简易的代码?或是否有开发测试的demo。谢谢。

// 触摸回调
BlastStage.prototype.onTouch = function(event)
{
if(!this.curState == Stage.StageState.gaming)return

var touch = event.touch;
var target = this.display.mapRoot
// 获取当前触摸点相对于按钮所在的坐标
var locationInNode = target.convertToNodeSpaceAR(touch.getLocation());
var row = Math.floor(locationInNode.y / g_config.GRID_HEIGHT);
var col = Math.floor(locationInNode.x / g_config.GRID_WIDTH);
if(col < 0 || col >= this.mapCol || row < 0 || row >= this.mapRow)
{
    return
}
if(this.blockInput)
{
    cc.log("下落中无法点击")
    return
}

var cell = this.map[row][col]
cc.log("点击的格子 row:" + row + " col:" + col)

明白,你这个是通过触摸位置,计算出当前点击可能的方块。没有体现出冒泡的机制。不过,也是一个很好的折中的方案。你这里宽度和高度会动态计算么,不然不同的大小的屏幕,显示会不会出现问题呢?

微信小游戏你可以搜一下叫做 萌萌企鹅

刚试玩了一把,还不错