cocos 用node.once 监听位置变化无效2.3.4

  • Creator 版本: 2.3.4

  • 目标平台:浏览器

  • 重现方式:见demo

  • 重现概率: 必现

各位大大好,我在使用once 监听组件变化时,发现position 的改变是无效的。但是同样的方式,可以监听到size的改变。想请问下这是什么原因? 但是如果吧once改成on却可以生效。
ModuleTest.zip (828.8 KB)

start() {
    this.area.once(cc.Node.EventType.POSITION_CHANGED, () => {
        console.log('position changed');//不打印
    })
    this.area.once(cc.Node.EventType.SIZE_CHANGED, () => {
        console.log('size changed');//打印
    })
}

onBtnClick() {
    this.area.width += 10;
    this.area.setPosition(this.area.position.add(cc.v3(10, 0, 0)))
}

没有POSITION_CHANGED这个事件

我看了下源码CCNode 只有使用on监听过的事件才会在标志位记录, once里面并没有这个处理,所以当只用了once而没有on的时候就相当于没监听= =



image
所以可以用on一直监听着, 然后回调里面什么都不执行

如果是这样的话, 那可以在回调里取消, 来实现once的效果. 像这样:

    let node = this.area;
    let callback = () => {
        node.off(cc.Node.EventType.POSITION_CHANGED, callback);
        console.log('position changed');
    };
    node.on(cc.Node.EventType.POSITION_CHANGED, callback);

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。