diff --git a/SpineViewer/Spine/SpineExporter/VideoExporter.cs b/SpineViewer/Spine/SpineExporter/VideoExporter.cs index 7b55087..db13c80 100644 --- a/SpineViewer/Spine/SpineExporter/VideoExporter.cs +++ b/SpineViewer/Spine/SpineExporter/VideoExporter.cs @@ -30,15 +30,6 @@ namespace SpineViewer.Spine.SpineExporter /// public bool KeepLast { get; set; } = true; - public override string? Validate() - { - if (base.Validate() is string error) - return error; - if (IsExportSingle && Duration < 0) - return Properties.Resources.negativeDuration; - return null; - } - /// /// 生成单个模型的帧序列 /// @@ -93,8 +84,16 @@ namespace SpineViewer.Spine.SpineExporter /// protected IEnumerable GetFrames(SpineObject[] spinesToRender, BackgroundWorker? worker = null) { - // 导出单个时必须根据 Duration 决定导出时长 + // 导出单个时取所有模型的所有轨道时长最大值 var duration = Duration; + if (duration < 0) + { + duration = spinesToRender.Select( + sp => sp.GetTrackIndices().Select( + i => sp.GetAnimationDuration(sp.GetAnimation(i)) + ).DefaultIfEmpty(0).Max() + ).Max(); + } float delta = 1f / FPS; int total = (int)(duration * FPS); // 完整帧的数量 diff --git a/SpineViewer/SpineViewer.csproj b/SpineViewer/SpineViewer.csproj index 8664749..2236b29 100644 --- a/SpineViewer/SpineViewer.csproj +++ b/SpineViewer/SpineViewer.csproj @@ -7,7 +7,7 @@ net8.0-windows $(SolutionDir)out false - 0.12.15 + 0.12.16 WinExe true appicon.ico