diff --git a/SpineViewer/Models/WorkspaceModel.cs b/SpineViewer/Models/WorkspaceModel.cs
index 534d13e..88d963e 100644
--- a/SpineViewer/Models/WorkspaceModel.cs
+++ b/SpineViewer/Models/WorkspaceModel.cs
@@ -37,6 +37,8 @@ namespace SpineViewer.Models
public uint MaxFps { get; set; } = 30;
+ public float Speed { get; set; } = 1f;
+
public bool ShowAxis { get; set; } = true;
public Color BackgroundColor { get; set; }
diff --git a/SpineViewer/Resources/Strings/en.xaml b/SpineViewer/Resources/Strings/en.xaml
index 6d869ae..c9cc4d0 100644
--- a/SpineViewer/Resources/Strings/en.xaml
+++ b/SpineViewer/Resources/Strings/en.xaml
@@ -104,6 +104,7 @@
Zoom
Rotation (Degrees)
Max FPS
+ Playback Speed
Render Selected Only
Show Axis
Background Color
diff --git a/SpineViewer/Resources/Strings/ja.xaml b/SpineViewer/Resources/Strings/ja.xaml
index e41ab1a..cce1f50 100644
--- a/SpineViewer/Resources/Strings/ja.xaml
+++ b/SpineViewer/Resources/Strings/ja.xaml
@@ -104,6 +104,7 @@
ズーム
回転(度)
最大FPS
+ 再生速度
選択のみレンダリング
座標軸を表示
背景色
diff --git a/SpineViewer/Resources/Strings/zh.xaml b/SpineViewer/Resources/Strings/zh.xaml
index b6f1399..af3f2c2 100644
--- a/SpineViewer/Resources/Strings/zh.xaml
+++ b/SpineViewer/Resources/Strings/zh.xaml
@@ -104,6 +104,7 @@
缩放
旋转(角度)
最大帧率
+ 播放速度
仅渲染选中
显示坐标轴
背景颜色
diff --git a/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs b/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs
index 54a7d60..1b2d58a 100644
--- a/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs
+++ b/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs
@@ -140,6 +140,13 @@ namespace SpineViewer.ViewModels.MainWindow
set => SetProperty(_renderer.MaxFps, value, v => _renderer.MaxFps = value);
}
+ public float Speed
+ {
+ get => _speed;
+ set => SetProperty(ref _speed, Math.Clamp(value, 0.01f, 100f));
+ }
+ private float _speed = 1f;
+
public bool ShowAxis
{
get => _showAxis;
@@ -193,15 +200,15 @@ namespace SpineViewer.ViewModels.MainWindow
});
private RelayCommand? _cmd_Restart;
- public RelayCommand Cmd_ForwardStep => _cmd_ForwardStep ??= new(() =>
- {
- lock (_forwardDeltaLock) _forwardDelta += _renderer.MaxFps > 0 ? 1f / _renderer.MaxFps : 0.001f;
+ public RelayCommand Cmd_ForwardStep => _cmd_ForwardStep ??= new(() =>
+ {
+ lock (_forwardDeltaLock) _forwardDelta += _renderer.MaxFps > 0 ? 1f / _renderer.MaxFps : 0.001f;
});
private RelayCommand? _cmd_ForwardStep;
public RelayCommand Cmd_ForwardFast => _cmd_ForwardFast ??= new(() =>
- {
- lock (_forwardDeltaLock) _forwardDelta += _renderer.MaxFps > 0 ? 10f / _renderer.MaxFps : 0.01f;
+ {
+ lock (_forwardDeltaLock) _forwardDelta += _renderer.MaxFps > 0 ? 10f / _renderer.MaxFps : 0.01f;
});
private RelayCommand? _cmd_ForwardFast;
@@ -390,7 +397,7 @@ namespace SpineViewer.ViewModels.MainWindow
if (_cancelToken?.IsCancellationRequested ?? true) break; // 提前中止
sp.Update(0); // 避免物理效果出现问题
- sp.Update(delta);
+ sp.Update(delta * _speed);
// 为选中对象绘制一个半透明背景
if (sp.IsSelected)
@@ -426,7 +433,7 @@ namespace SpineViewer.ViewModels.MainWindow
}
public RendererWorkspaceConfigModel WorkspaceConfig
- {
+ {
// TODO: 背景图片
get
{
@@ -441,23 +448,25 @@ namespace SpineViewer.ViewModels.MainWindow
FlipX = FlipX,
FlipY = FlipY,
MaxFps = MaxFps,
+ Speed = Speed,
ShowAxis = ShowAxis,
BackgroundColor = BackgroundColor,
};
}
set
{
- ResolutionX = value.ResolutionX;
- ResolutionY = value.ResolutionY;
- CenterX = value.CenterX;
- CenterY = value.CenterY;
- Zoom = value.Zoom;
- Rotation = value.Rotation;
- FlipX = value.FlipX;
- FlipY = value.FlipY;
- MaxFps = value.MaxFps;
- ShowAxis = value.ShowAxis;
- BackgroundColor = value.BackgroundColor;
+ ResolutionX = value.ResolutionX;
+ ResolutionY = value.ResolutionY;
+ CenterX = value.CenterX;
+ CenterY = value.CenterY;
+ Zoom = value.Zoom;
+ Rotation = value.Rotation;
+ FlipX = value.FlipX;
+ FlipY = value.FlipY;
+ MaxFps = value.MaxFps;
+ Speed = value.Speed;
+ ShowAxis = value.ShowAxis;
+ BackgroundColor = value.BackgroundColor;
}
}
}
diff --git a/SpineViewer/Views/MainWindow.xaml b/SpineViewer/Views/MainWindow.xaml
index b9db125..90625c3 100644
--- a/SpineViewer/Views/MainWindow.xaml
+++ b/SpineViewer/Views/MainWindow.xaml
@@ -693,6 +693,7 @@
+
@@ -731,13 +732,17 @@
+
+
+
+
-
-
+
+
-
-
+
+