Motionstreak 父节点旋转时不希望影响子节点拖尾,该怎么修改源码?

如题,父节点转动时,子节点世界坐标改变,拖尾角度展示不合预期,怎样定制这部分引擎呢? bear大神给了方向,可是自己尝试修改没有成功,请引擎组给点建议

motion-streak.zip (2.6 KB)

1赞

111 求助下引擎组

顶一下

help、

:pensive:

:worried:

有人吗

这里看到了么?取componenet中的points用来计算拖尾,points里面都是世界坐标,改成相对坐标就OK了啊

motionStreak组件里面给个flag,这个flag为true时 points用的是世界坐标,flag为false时 points用相对坐标。相对坐标用comp._points转换一下就可以了

下面时我随便写的,可以参考一下,实际使用你得根据自己项目得需求

//motionStreak组件中增加属性
        rotationEnable : {
            default : false,
        },

//在motion-streaks.js中加一个方法用于转换坐标
    covertFunc (comp, points) {
        if (comp.rotationEnable) {
            return points;
        }
        this._pointArray = [];
        for (let i = 0; i < points.length; i++) {
            const element = points[i];
            var point = comp.node.parent.convertToNodeSpaceAR(element);
            point.rotate(-comp.node.rotate * 180 / Math.PI);
            this._pointArray.push(point);
        }
        return this._pointArray;
    },

……
//改motionStreakAssembler中得update方法中points赋值那一段为:
        let points = this.covertFunc(comp, comp._points);

写的比较粗糙,但大概是这个意思

谢谢回复!
解决了!

其实把 let matrix = node._worldMatrix;改成 let matrix = node._matrix就是使用local坐标系了,但同时需要把后面的renderdata里的坐标再转回世界坐标。

两处修改见下图:

1赞

:+1::+1:这个方案不错,我都没仔细看这块的代码,哈哈哈