From 2fc32356e1cad1d9fc5ea670928f020469ba3b6d Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 30 一月 2026 10:34:35 +0800
Subject: [PATCH] 125 战斗 死亡被错误计入activeSkillTracks 导致的技能播放状态未重置问题
---
Main/System/Battle/Motion/MotionBase.cs | 32 +++++++++++++++++++++-----------
1 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index f7ca6eb..d29a15d 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -28,6 +28,9 @@
private Spine.TrackEntry currentTrack;
private Dictionary<int, Spine.TrackEntry> activeSkillTracks = new Dictionary<int, Spine.TrackEntry>();
+ // 姝讳骸鍔ㄧ敾涓撶敤杞ㄩ亾绱㈠紩
+ private const int DeathTrackIndex = 9;
+
// 瀛愭妧鑳借建閬撴睜绠$悊锛堝湪Init涓垵濮嬪寲锛屼笉瑕佸湪杩欓噷鍒濆鍖栵級
private Queue<int> availableSubTracks;
private Dictionary<SkillBase, int> subSkillTrackMap = new Dictionary<SkillBase, int>();
@@ -117,10 +120,9 @@
if (animState == null) return null;
// 浣跨敤杞ㄩ亾9浣滀负姝讳骸鍔ㄧ敾涓撶敤杞ㄩ亾锛堢嫭绔嬩簬涓昏建閬�0鍜屽瓙鎶�鑳借建閬�1-8锛�
- const int deathTrackIndex = 9;
// 娓呴櫎姝讳骸杞ㄩ亾涓婄殑鍥炶皟
- if (activeSkillTracks.TryGetValue(deathTrackIndex, out var oldDeathTrack))
+ if (activeSkillTracks.TryGetValue(DeathTrackIndex, out var oldDeathTrack))
{
if (trackEntryCallbacks.ContainsKey(oldDeathTrack))
trackEntryCallbacks.Remove(oldDeathTrack);
@@ -134,11 +136,11 @@
return null;
}
- Spine.TrackEntry deathTrack = animState.SetAnimation(deathTrackIndex, deadAnim, false);
+ Spine.TrackEntry deathTrack = animState.SetAnimation(DeathTrackIndex, deadAnim, false);
if (deathTrack != null)
{
- activeSkillTracks[deathTrackIndex] = deathTrack;
+ activeSkillTracks[DeathTrackIndex] = deathTrack;
if (onComplete != null)
trackEntryCallbacks[deathTrack] = onComplete;
@@ -149,6 +151,14 @@
private void AddAction(Action action) => runningActions.Add(action);
private void RemoveAction(Action action) => runningActions.Remove(action);
+
+ // 妫�鏌ユ槸鍚︽湁娲昏穬鐨勬妧鑳借建閬擄紙鎺掗櫎姝讳骸杞ㄩ亾锛�
+ private bool HasActiveSkillTracks()
+ {
+ if (activeSkillTracks.Count == 0) return false;
+ if (activeSkillTracks.Count == 1 && activeSkillTracks.ContainsKey(DeathTrackIndex)) return false;
+ return true;
+ }
public Spine.TrackEntry PlaySkillAnimation(SkillConfig skillConfig, SkillBase skillBase, bool isSubSkill, Action onComplete = null)
{
@@ -306,8 +316,8 @@
subSkillTrackMap.Remove(skillBase);
}
- // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim
- if (activeSkillTracks.Count == 0)
+ // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim锛堟帓闄ゆ浜¤建閬擄級
+ if (!HasActiveSkillTracks())
{
playingSkillWithAnim = false;
playingSkill = false;
@@ -360,7 +370,7 @@
subSkillTrackMap.Remove(skillBase);
}
- if (activeSkillTracks.Count == 0)
+ if (!HasActiveSkillTracks())
{
playingSkill = false;
playingSkillWithAnim = false;
@@ -371,7 +381,7 @@
if (skillTrack.TrackTime == 0) failCount++;
if (failCount > 100)
{
- Debug.LogError("鎶�鑳藉姩鐢绘挱鏀惧け璐ワ紝寮哄埗缁撴潫 " + skillConfig.SkillID);
+ Debug.LogError("鎶�鑳藉姩鐢绘挱鏀惧け璐ワ紝寮哄埗缁撴潫 " + skillConfig.SkillID + " is caster dead " + skillBase.caster.IsDead());
skillBase.ForceFinished();
RemoveAction(frameHandler);
if (activeSkillTracks.ContainsKey(trackIndex))
@@ -385,7 +395,7 @@
subSkillTrackMap.Remove(skillBase);
}
- if (activeSkillTracks.Count == 0)
+ if (!HasActiveSkillTracks())
{
playingSkillWithAnim = false;
playingSkill = false;
@@ -480,8 +490,8 @@
subSkillTrackMap.Remove(skillBase);
}
- // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim
- if (activeSkillTracks.Count == 0)
+ // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim锛堟帓闄ゆ浜¤建閬擄級
+ if (!HasActiveSkillTracks())
{
playingSkill = false;
}
--
Gitblit v1.8.0