From a8950d5ee36a78915222e6063d1de043aa1be89b Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 02 二月 2026 19:06:26 +0800
Subject: [PATCH] 125 战斗卡顿问题

---
 Main/System/Battle/BattleField/BattleField.cs      |  117 +++++++++++++++++++++++++--------------
 Main/System/Battle/RecordPlayer/RecordPlayer.cs    |    5 +
 Main/System/Battle/BattleTweenMgr.cs               |    5 +
 Main/System/Battle/BattleManager.cs                |    7 ++
 Main/System/Battle/BattleObject/BattleObjMgr.cs    |    8 ++
 Main/System/Battle/BattleEffectMgr.cs              |    5 +
 Main/System/Battle/BattleField/StoryBattleField.cs |   24 ++++---
 7 files changed, 115 insertions(+), 56 deletions(-)

diff --git a/Main/System/Battle/BattleEffectMgr.cs b/Main/System/Battle/BattleEffectMgr.cs
index 3e5078c..6e28f34 100644
--- a/Main/System/Battle/BattleEffectMgr.cs
+++ b/Main/System/Battle/BattleEffectMgr.cs
@@ -11,6 +11,11 @@
 
     public void Init(BattleField _battleField)
     {
+        Reload(_battleField);
+    }
+
+    public void Reload(BattleField _battleField)
+    {
         Release();
         battleField = _battleField;
     }
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 7b0ccb7..3869ec2 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -136,23 +136,9 @@
     }
 
     public virtual void Init(int _MapID, int _FuncLineID, JsonData _extendData,
-        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte turnMax)
+        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte _turnMax)
     {
-        MapID = _MapID;
-        redTeamList = _redTeamList;
-        blueTeamList = _blueTeamList;
-        FuncLineID = _FuncLineID;
-        extendData = _extendData;
-        IsBattleFinish = false;
-        round = 0;
-        this.turnMax = turnMax;
-
-        redTeamIndex = 0;
-        blueTeamIndex = 0;
-
-        // 閲嶇疆姝讳骸澶勭悊璁板綍
-        processingDeathObjIds.Clear();
-
+        SetData(_MapID, _FuncLineID, _extendData, _redTeamList, _blueTeamList, turnMax);
         battleEffectMgr.Init(this);
         battleTweenMgr.Init(this);
         recordPlayer.Init(this);
@@ -169,36 +155,12 @@
 
         LoadMap(MapID);
 
-        // 娓呯┖褰撳墠鎴樺満鐨勮閲忚褰曪紙闃叉涓嶅悓鎴樻枟涔嬮棿鐨勬暟鎹贩涔憋級
-        if (BattleHeroInfoBar.largestPackUID.ContainsKey(guid))
-        {
-            BattleHeroInfoBar.largestPackUID.Remove(guid);
-        }
-        if (BattleHeroInfoBar.largestPackUIDAllObjectsToHp.ContainsKey(guid))
-        {
-            BattleHeroInfoBar.largestPackUIDAllObjectsToHp.Remove(guid);
-        }
-        if (BattleHeroInfoBar.largestPackUIDAllObjectsMaxHp.ContainsKey(guid))
-        {
-            BattleHeroInfoBar.largestPackUIDAllObjectsMaxHp.Remove(guid);
-        }
-
-        // battleRootNode.SetBackground(ResManager.Instance.LoadAsset<Texture>("Texture/FullScreenBg", "mainui_img_277"));
-
         SetBattleStartState();
-        if (MapID == 1)
-        {
-            SetSpeedRatio(BattleManager.Instance.speedGear[AutoFightModel.Instance.fightSpeed - 1]);
-        }
-        else
-        {
-            SetSpeedRatio(BattleManager.Instance.speedGear[BattleManager.Instance.speedIndex]);
-        }
         SetRootNodePosition();
-        rejectNewPackage = false;
         OnRoundChange?.Invoke(round, turnMax);
 
         PreloadResources(redTeamList, blueTeamList);
+        EventBroadcast.Instance.Broadcast<string>(EventName.BATTLE_START, guid);
 
 #if UNITY_EDITOR
         if (Launch.Instance.isOpenSkillLogFile)
@@ -239,7 +201,78 @@
         }
 #endif
 
-        EventBroadcast.Instance.Broadcast<string>(EventName.BATTLE_START, guid);
+    }
+
+    public virtual void Reload(int _MapID, int _FuncLineID, JsonData _extendData,
+        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte _turnMax)
+    {
+        SetData(_MapID, _FuncLineID, _extendData, _redTeamList, _blueTeamList, _turnMax);
+        battleEffectMgr.Reload(this);
+        battleTweenMgr.Reload(this);
+        recordPlayer.Reload(this);
+        
+        if (blueTeamList == null)
+        {
+            battleObjMgr.Reload(this, redTeamList[redTeamIndex], null);
+            HaveRest();
+        }
+        else
+        {
+            battleObjMgr.Reload(this, redTeamList[redTeamIndex], blueTeamList[blueTeamIndex]);
+        }
+
+        LoadMap(MapID);
+
+        SetBattleStartState();
+
+        SetRootNodePosition();
+
+        OnRoundChange?.Invoke(round, turnMax);
+
+        PreloadResources(redTeamList, blueTeamList);
+
+    }
+
+    public virtual void SetData(int _MapID, int _FuncLineID, JsonData _extendData,
+        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte _turnMax)
+    {
+        MapID = _MapID;
+        redTeamList = _redTeamList;
+        blueTeamList = _blueTeamList;
+        FuncLineID = _FuncLineID;
+        extendData = _extendData;
+        IsBattleFinish = false;
+        round = 0;
+        this.turnMax = _turnMax;
+
+        redTeamIndex = 0;
+        blueTeamIndex = 0;
+
+        // 閲嶇疆姝讳骸澶勭悊璁板綍
+        processingDeathObjIds.Clear();
+        rejectNewPackage = false;
+        if (MapID == 1)
+        {
+            SetSpeedRatio(BattleManager.Instance.speedGear[AutoFightModel.Instance.fightSpeed - 1]);
+        }
+        else
+        {
+            SetSpeedRatio(BattleManager.Instance.speedGear[BattleManager.Instance.speedIndex]);
+        }
+
+        // 娓呯┖褰撳墠鎴樺満鐨勮閲忚褰曪紙闃叉涓嶅悓鎴樻枟涔嬮棿鐨勬暟鎹贩涔憋級
+        if (BattleHeroInfoBar.largestPackUID.ContainsKey(guid))
+        {
+            BattleHeroInfoBar.largestPackUID.Remove(guid);
+        }
+        if (BattleHeroInfoBar.largestPackUIDAllObjectsToHp.ContainsKey(guid))
+        {
+            BattleHeroInfoBar.largestPackUIDAllObjectsToHp.Remove(guid);
+        }
+        if (BattleHeroInfoBar.largestPackUIDAllObjectsMaxHp.ContainsKey(guid))
+        {
+            BattleHeroInfoBar.largestPackUIDAllObjectsMaxHp.Remove(guid);
+        }
     }
 
     protected void PreloadResources(List<TeamBase> redTeamList, List<TeamBase> blueTeamLis)
diff --git a/Main/System/Battle/BattleField/StoryBattleField.cs b/Main/System/Battle/BattleField/StoryBattleField.cs
index c1dceef..00a5716 100644
--- a/Main/System/Battle/BattleField/StoryBattleField.cs
+++ b/Main/System/Battle/BattleField/StoryBattleField.cs
@@ -22,7 +22,6 @@
     protected int chapter;//   绔犺妭
     protected int wave;//  娉㈡暟
     protected int level;// 鍏冲崱
-    protected JsonData extendData;
 
     protected MainChapterConfig chapterConfig;
 
@@ -37,10 +36,21 @@
 
     }
 
-    public override void Init(int MapID, int FuncLineID, JsonData _extendData,
-        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte turnMax)
+    public override void Init(int _MapID, int _FuncLineID, JsonData _extendData,
+        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte _turnMax)
     {
+        base.Init(_MapID, _FuncLineID, _extendData, _redTeamList, _blueTeamList, _turnMax);
 
+        //  闃叉閲嶅娉ㄥ唽鐨勯棶棰�
+        TeamManager.Instance.OnTeamChange += OnTeamChange;
+
+        FuncPresetManager.Instance.OnFuncPresetUseDataEvent += OnFuncPresetUseDataEvent;
+    }
+
+    public override void SetData(int _MapID, int _FuncLineID, JsonData _extendData,
+        List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte _turnMax)
+    {
+        base.SetData(_MapID, _FuncLineID, _extendData, _redTeamList, _blueTeamList, _turnMax);
         chapter = FuncLineID / 10000;
         wave = MapID == 1 ? FuncLineID % 100 : 1;//绗嚑娉㈡��
         level = (FuncLineID % 10000) / 100;
@@ -49,7 +59,6 @@
         chapterConfig = MainChapterConfig.Get(chapter);
         levelConfig = MainLevelConfig.Get(level);
         
-        base.Init(MapID, FuncLineID, extendData, _redTeamList, _blueTeamList, turnMax);
 
         if (null == _blueTeamList || _blueTeamList.Count == 0)
         {
@@ -62,13 +71,6 @@
 
         // LoadBattleMode();
         lastPresetID = TeamManager.Instance.GetMainTeamID();
-
-        //  闃叉閲嶅娉ㄥ唽鐨勯棶棰�
-        TeamManager.Instance.OnTeamChange.RemoveCompletely(OnTeamChange);
-        TeamManager.Instance.OnTeamChange += OnTeamChange;
-
-        FuncPresetManager.Instance.OnFuncPresetUseDataEvent.RemoveCompletely(OnFuncPresetUseDataEvent);
-        FuncPresetManager.Instance.OnFuncPresetUseDataEvent += OnFuncPresetUseDataEvent;
     }
 
     protected override void LoadMap(int mapID)
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index e7a56b2..1719158 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -534,11 +534,16 @@
             }
             battleFields.Add(guid, battleField);
             onBattleFieldCreate?.Invoke(guid, battleField);
+            battleField.Init(MapID, FuncLineID, extendData, redTeamList, blueTeamList, vNetData.TurnMax);
+
+        }
+        else
+        {
+            battleField.Reload(MapID, FuncLineID, extendData, redTeamList, blueTeamList, vNetData.TurnMax);
         }
 
 
 
-        battleField.Init(MapID, FuncLineID, extendData, redTeamList, blueTeamList, vNetData.TurnMax);
 
         return battleField;
     }
diff --git a/Main/System/Battle/BattleObject/BattleObjMgr.cs b/Main/System/Battle/BattleObject/BattleObjMgr.cs
index 1fd926f..87813b2 100644
--- a/Main/System/Battle/BattleObject/BattleObjMgr.cs
+++ b/Main/System/Battle/BattleObject/BattleObjMgr.cs
@@ -22,11 +22,15 @@
 
     public void Init(BattleField _battleField, TeamBase _redTeam, TeamBase _blueTeam)
     {
+        Reload(_battleField, _redTeam, _blueTeam);
+    }
+
+    public void Reload(BattleField _battleField, TeamBase _redTeam, TeamBase _blueTeam)
+    {
         Release();
         battleField = _battleField;
         ReloadTeam(_redTeam, BattleCamp.Red);
-        ReloadTeam(_blueTeam, BattleCamp.Blue, false);
-    }
+        ReloadTeam(_blueTeam, BattleCamp.Blue, false);    }
 
     public void ReloadTeam(TeamBase teamBase, BattleCamp _camp, bool active = true)
     {
diff --git a/Main/System/Battle/BattleTweenMgr.cs b/Main/System/Battle/BattleTweenMgr.cs
index 794664f..6d90650 100644
--- a/Main/System/Battle/BattleTweenMgr.cs
+++ b/Main/System/Battle/BattleTweenMgr.cs
@@ -13,6 +13,11 @@
 
     public void Init(BattleField _battleField)
     {
+        Reload(_battleField);
+    }
+
+    public void Reload(BattleField _battleField)
+    {
         Release();
         battleField = _battleField;
     }
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index 0113d72..83300c5 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -28,6 +28,11 @@
 
     public void Init(BattleField _battleField)
     {
+        Reload(_battleField);
+    }
+
+    public void Reload(BattleField _battleField)
+    {
         Release();
         stepForcefinish = false;
         battleField = _battleField;

--
Gitblit v1.8.0