From 7f6661cca40e3530111d628222fa25462022ec78 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 04 九月 2025 18:25:36 +0800
Subject: [PATCH] 2025.9.4

---
 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