From 2cd9074f30fcaf864b4fb103910541f4ec89db7c Mon Sep 17 00:00:00 2001 From: Jare Guo Date: Fri, 6 May 2022 21:28:49 +0800 Subject: [PATCH 1/3] Fix MotionStreak initializing and avoid trail delay by one frame --- cocos2d/core/components/CCMotionStreak.js | 6 ++++-- cocos2d/core/renderer/webgl/assemblers/motion-streak.js | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cocos2d/core/components/CCMotionStreak.js b/cocos2d/core/components/CCMotionStreak.js index 6df90763c23..68999643ec4 100644 --- a/cocos2d/core/components/CCMotionStreak.js +++ b/cocos2d/core/components/CCMotionStreak.js @@ -248,8 +248,10 @@ var MotionStreak = cc.Class({ reset () { this._points.length = 0; this._assembler && this._assembler._renderData.clear(); - this._lastWPos.x = 0; - this._lastWPos.y = 0; + this.node._updateWorldMatrix(); + let matrix = this.node._worldMatrix.m; + this._lastWPos.x = matrix[12]; + this._lastWPos.y = matrix[13]; if (CC_EDITOR) { cc.engine.repaintInEditMode(); } diff --git a/cocos2d/core/renderer/webgl/assemblers/motion-streak.js b/cocos2d/core/renderer/webgl/assemblers/motion-streak.js index fdebdb42489..beadffbdb75 100644 --- a/cocos2d/core/renderer/webgl/assemblers/motion-streak.js +++ b/cocos2d/core/renderer/webgl/assemblers/motion-streak.js @@ -92,6 +92,7 @@ export default class MotionStreakAssembler extends Assembler2D { let stroke = comp._stroke / 2; let node = comp.node; + node._updateWorldMatrix(); let matrix = node._worldMatrix.m; let tx = matrix[12], ty = matrix[13]; From 6bbced8852a12c984bcfd0de9b183bdc4d8f1390 Mon Sep 17 00:00:00 2001 From: Jare Guo Date: Mon, 23 May 2022 13:40:09 +0800 Subject: [PATCH 2/3] Read motion streak start position just before rendering --- cocos2d/core/components/CCMotionStreak.js | 6 ++---- cocos2d/core/renderer/webgl/assemblers/motion-streak.js | 3 ++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cocos2d/core/components/CCMotionStreak.js b/cocos2d/core/components/CCMotionStreak.js index 68999643ec4..ad6b45a0f62 100644 --- a/cocos2d/core/components/CCMotionStreak.js +++ b/cocos2d/core/components/CCMotionStreak.js @@ -62,6 +62,7 @@ var MotionStreak = cc.Class({ ctor () { this._points = []; this._lastWPos = new cc.Vec2(); + this._lastWPosUpdated = false; }, properties: { @@ -248,10 +249,7 @@ var MotionStreak = cc.Class({ reset () { this._points.length = 0; this._assembler && this._assembler._renderData.clear(); - this.node._updateWorldMatrix(); - let matrix = this.node._worldMatrix.m; - this._lastWPos.x = matrix[12]; - this._lastWPos.y = matrix[13]; + this._lastWPosUpdated = false; if (CC_EDITOR) { cc.engine.repaintInEditMode(); } diff --git a/cocos2d/core/renderer/webgl/assemblers/motion-streak.js b/cocos2d/core/renderer/webgl/assemblers/motion-streak.js index beadffbdb75..a97fff2481a 100644 --- a/cocos2d/core/renderer/webgl/assemblers/motion-streak.js +++ b/cocos2d/core/renderer/webgl/assemblers/motion-streak.js @@ -100,7 +100,7 @@ export default class MotionStreakAssembler extends Assembler2D { let lastPos = comp._lastWPos; let fadeTime = comp._fadeTime; - let moved = lastPos.x !== tx || lastPos.y !== ty; + let moved = comp._lastWPosUpdated && (lastPos.x !== tx || lastPos.y !== ty); if (moved) { let cur; let newHead = false; @@ -145,6 +145,7 @@ export default class MotionStreakAssembler extends Assembler2D { lastPos.x = tx; lastPos.y = ty; + comp._lastWPosUpdated = true; if (points.length < 2) { return; From e1e544ca81a8e9ed44208b248bc2937e8851cb20 Mon Sep 17 00:00:00 2001 From: Jare Guo Date: Mon, 18 Jul 2022 22:50:43 +0800 Subject: [PATCH 3/3] avoid using public method --- cocos2d/core/renderer/webgl/assemblers/motion-streak.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cocos2d/core/renderer/webgl/assemblers/motion-streak.js b/cocos2d/core/renderer/webgl/assemblers/motion-streak.js index a97fff2481a..07083d0eef4 100644 --- a/cocos2d/core/renderer/webgl/assemblers/motion-streak.js +++ b/cocos2d/core/renderer/webgl/assemblers/motion-streak.js @@ -24,6 +24,7 @@ ****************************************************************************/ import Assembler2D from '../../assembler-2d'; +import Mat4 from '../../../value-types/mat4'; const MotionStreak = require('../../../components/CCMotionStreak'); const RenderFlow = require('../../render-flow'); @@ -49,6 +50,7 @@ let _tangent = cc.v2(); let _miter = cc.v2(); let _normal = cc.v2(); let _vec2 = cc.v2(); +let _worldMat = new Mat4(); function normal (out, dir) { //get perpendicular @@ -92,9 +94,8 @@ export default class MotionStreakAssembler extends Assembler2D { let stroke = comp._stroke / 2; let node = comp.node; - node._updateWorldMatrix(); - let matrix = node._worldMatrix.m; - let tx = matrix[12], ty = matrix[13]; + node.getWorldMatrix(_worldMat); + let tx = _worldMat.m[12], ty = _worldMat.m[13]; let points = comp._points; let lastPos = comp._lastWPos;