From 5f44d21b3921abc88506a7ec46b3fe6f078664aa Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期五, 14 三月 2025 15:33:24 +0800 Subject: [PATCH] 新增走航融合功能(初版) --- src/utils/map/animation.js | 53 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/utils/map/animation.js b/src/utils/map/animation.js index 05c8ba7..4180e7d 100644 --- a/src/utils/map/animation.js +++ b/src/utils/map/animation.js @@ -21,6 +21,7 @@ this._fps = this.frameAnimation.fps; // 缁樺埗鍥惧舰缂撳瓨 this.moveViews = {}; + this.clear = true; } MapAnimation.prototype = { @@ -82,7 +83,7 @@ if (i == endIndex || i == factorDatas.length() - 1) { break; } - // 鍔ㄧ敾杞ㄨ抗 + // 鍔ㄧ敾杞ㄨ抗锛堝凡缁樺埗閮ㄥ垎锛� var animationData = factorDatas.getByIndex(0, i + 1); // 璺緞鐐� @@ -104,14 +105,14 @@ var d = distance / count; // 姣忎釜fps瀵瑰簲鐨勫疄闄呮椂闀�(榛樿1绉�) var t = 1; - // 涓ょ偣闂翠笉杩炵画鏃� + // 涓ょ偣闂翠笉杩炵画鏃讹紝浣跨敤榛樿鏃堕暱锛岄伩鍏� if (distance > this.maxD) { - count = 4 * this._fps; + count = this.frameAnimation.taskPeriod * this._fps; d = distance / count; t = duration / (count / this._fps); } - // 鐩戞祴鏁版嵁 + // 鐩戞祴鏁版嵁锛堝緟缁樺埗鏁版嵁鐐癸紝鍦ㄥ凡缁樺埗閮ㄥ垎鍜岃鏁版嵁鐐逛箣闂达紝鎻掑叆鍔ㄧ敾甯ф暟鎹偣锛� // var fData1 = factorDatas.getByIndex(i, i + 1) var fData2 = factorDatas.getByIndex(i + 1, i + 2); @@ -134,7 +135,7 @@ } animationData.times.push(time); } - // factor + // 缁欐瘡涓洃娴嬪洜瀛愯繘琛屾彃甯� for (const key in animationData.factor) { var factor = animationData.factor[key]; factor.insertFrame(fData2.factor[key], count, distance <= this.maxD); @@ -159,6 +160,15 @@ Layer.drawMesh(d, f); // 椋庡悜椋庨�� sector.drawSectorAna(d, start + index); + // 鎵ц鐩戝惉鍑芥暟 + if (typeof that.OnEachFrameCallback === 'function') { + that.OnEachFrameCallback(d, start + index); + } + // 缁樺埗3D鍥惧舰鏃讹紝鏈�灏戦渶瑕�2涓偣鎵嶅彲缁樺埗鍥惧舰 + // 鍥犳姝ゅ绱㈠紩鍙埌鍊掓暟绗簩涓偣灏辩粨鏉燂紝姝ゆ椂鎵ц杩欐浠诲姟缁撴潫鐨勭洃鍚洖璋� + if (typeof that.OnEachTaskEndCallback === 'function') { + that.OnEachTaskEndCallback(d); + } } var pos = d.lnglats_GD[d.lnglats_GD.length - 1]; @@ -200,9 +210,27 @@ this.start(); }, + /** + * 璁剧疆姣忎竴甯х殑鐩戝惉鍑芥暟 + * @param {Function} callback + */ + setOnEachFrameCallback(callback) { + this.OnEachFrameCallback = callback; + }, + + /** + * 璁剧疆姣忎竴娈典换鍔$粨鏉熺殑鐩戝惉鍑芥暟 + * @param {Function} callback + */ + setOnEachTaskEndCallback(callback) { + this.OnEachTaskEndCallback = callback; + }, + /*******************************鍔ㄧ敾浠诲姟閫昏緫 -start ******************************/ start: function () { - sector.clearSector(); + if (this.frameAnimation.isStop) { + sector.clearSector(); + } this.frameAnimation.start(); }, changeSpeed: function (speed) { @@ -214,12 +242,14 @@ stop: function () { this.factorDatas = undefined; this.frameAnimation.addOnNextTasks(undefined); + // this.OnEachFrameCallback = undefined; + // this.OnEachTaskEndCallback = undefined; this.frameAnimation.stop(); + this._clearMap(); }, setOnStopCallback: function (callback) { this.frameAnimation.setOnStopCallback( function () { - this._clearMap(); callback(); }.bind(this) ); @@ -242,6 +272,8 @@ /*******************************鍔ㄧ敾浠诲姟閫昏緫 -end ******************************/ _clearMap: function () { + if (!this.clear) return; + var list = []; for (const key in this.moveViews) { list.push(this.moveViews[key]); @@ -386,4 +418,9 @@ } }; -export { MapAnimation }; +const realTimeMapAnimation = new MapAnimation(); +// 寮�鍚姩鎬佺粯鍒堕�熷害 +realTimeMapAnimation.setDynamicSpeed(true, 4); +// realTimeMapAnimation.clear = false; + +export { realTimeMapAnimation, MapAnimation }; -- Gitblit v1.9.3