能不能出一个高性能的设置坐标的接口

游戏很容易遇到一个需求:大量帧动画节点在屏幕中移动

如果想自己用最简单高效的逻辑控制表现,就需要每帧手动调用setPosition来更新节点位置,这些节点并没有挂载其他组件,却要执行if (this._eventMask & TRANSFORM_ON) {
this.emit(NodeEventType.TRANSFORM_CHANGED, TransformBit.POSITION);
}

节点也没有子节点,却要执行this.invalidateChildren(TransformBit.POSITION);
这个里面的逻辑对于没有子节点的节点来说,好浪费性能

能不能出一个可以用于最简单情况的setPosition,比如下面


setPosition (x,y){
        this._lpos.x = x
        this._lpos.y = y
        let dirtyBit = TransformBit.POSITION

        let flag = node._dirtyFlagsPri;
        if (JSB)nativeDirtyNodes[0] = this.native;
        if ((flag & this._hasChangedFlags[0] & dirtyBit) !== dirtyBit) {
            flag |= dirtyBit;
            this._dirtyFlagsPri = flag;
            if (JSB) this._nativeDirtyFlag[0] = flag;
        }
    }

小菜鸡实在看不懂引擎代码在干什么,还请路过的大佬们教一教
另外,还想问问,相较于每帧用setPosition 来更新位置,如果用tween来实现位移,是不是可以有效减少js到c++的拷贝开销

同问,确实每帧setPosition很耗性能,大哥你后来有找到性能好点的方法吗

我已经更新到了3.7.2,现在已经顾不上这种小性能问题了

我也是3.7.2,感觉setPosition性能也一般 :rofl:

emit 之前不是有一个 if 吗?

  1. 大量帧动画在屏幕中移动,帧动画如果是合图应该不会很吃性能
  2. setPosition本来就已经做了相关的判断和优化
  3. 也就是去掉那些判断代码,带来的性能提升微乎其微
  4. 关于游戏性能优化,建议看看论坛里的几篇精品,方向找准了做事才会有效率,不能捡芝麻丢西瓜