我有C# + WPF应用程序。我创建了将元素从一个点移动到另一个点的动画。我有一个热键,调用一个method>,方法启动动画动画在我的PC上完美(我有非常强大的PC),但如果另一个用户使用像样的PC,我的应用程序动画有一些滞后或冻结。看起来样本率很低
所以,问题是动画在其他电脑上效果不好。
我注意到,如果我运行我的应用程序和任务管理器,我会看到GPU负载正在消耗,当我使用动画开始运行一个方法时,GPU负载正在增加,每次使用动画方法单击热键时,GPU负载都会增加到15%。
目前的结果:动画制作不好,有些滞后。
预期效果:动画制作精良流畅。
如何使动画在所有机器上正常工作?
public class HotKeys
{
DoubleAnimation animShowCard = new DoubleAnimation(100, TimeSpan.FromMilliseconds(250));
DoubleAnimation animShowCardOffset = new DoubleAnimation(0, TimeSpan.FromMilliseconds(150));
public HotKeys(MainWindow _window)
{
SineEase sineEase = new SineEase();
sineEase.EasingMode = EasingMode.EaseOut;
animShowCard.EasingFunction = sineEase;
animShowCardOffset.EasingFunction = sineEase;
animShowCard.Completed += (s, e) =>
{
window.cardQuestionBorder.RenderTransform = new TranslateTransform(100, 0);
window.cardQuestionBorder.RenderTransform.BeginAnimation(TranslateTransform.XProperty, animShowCardOffset);
};
}
//call a method with animation when D1 hotkey is clicked
if (e.Key == Key.D1)
{
e.Handled = true;
ShowCard();
}
//method that show animation
private void ShowCard()
{
window.cardQuestionBorder.RenderTransform = new TranslateTransform(-1600, 0);
window.cardQuestionBorder.RenderTransform.BeginAnimation(TranslateTransform.XProperty, animShowCard);
}
}
我试图将动画的SampleRate (我认为60帧是默认值)更改为25或更少,但即使在我的PC上,它也会变得更糟:
Timeline.SetDesiredFrameRate(animShowCard, 25);
编辑:
我记录了我的应用程序在其他PC上工作,它消耗了高达45%的GPU负载。
编辑2:
我找到了根本问题。这是一张卡片的影子效应。我在xaml上用过。当我移除这个东西的时候,动画一直运行得很流畅和很好。
<Border.Effect>
<DropShadowEffect Color="Black"
Direction="320"
BlurRadius="60"
ShadowDepth="40"
Opacity="0.8" />
</Border.Effect>
有什么办法修复它吗?我可以使用另一种阴影类型吗?我如何在后面的代码中使用它?
发布于 2020-02-29 22:04:53
问题是我在边界上使用了阴影效应。边框包含许多元素,如矩形和文本。效果适用于边框中的所有元素。这就是为什么它反映了GPU的使用。我只是在内部元素上应用了阴影效果,而不是边框,现在动画作品还不错。
https://stackoverflow.com/questions/60248653
复制