gpt4 book ai didi

Silverlight 动画不流畅

转载 作者:行者123 更新时间:2023-12-04 15:38:03 25 4
gpt4 key购买 nike

当尝试在 Silverlight 中为对象的时间/帧设置动画时(与使用 DoubleAnimation 或 Storyboard 之类的东西相反,它们不适合例如快节奏的游戏),例如每帧在特定方向上移动一艘宇宙飞船,运动是跳跃的并且不是很顺利。屏幕甚至似乎撕裂。

CompositionTarget 和 DistpatcherTimer 之间似乎没有区别。
我使用以下方法(在伪代码中):

Register Handler to Tick-Event of a DispatcherTimer
In each Tick:
Compute the elapsed time from the last frame in milliseconds
Object.X += movementSpeed * ellapsedMilliseconds

这应该会导致平稳的运动,对吗?但事实并非如此。
这是一个示例(控件:WASD 和鼠标): Silverlight Game .
尽管我描述的效果在本示例中不太普遍,但我可以向您保证,即使在 Canvas 上移动单个矩形也会产生跳跃动画。

有人知道如何最大限度地减少这种情况吗?是否有其他方法可以解决这个问题,使用 Storyboards/DoubleAnimations 来处理基于帧的动画?

编辑:这是一种快速而肮脏的方法,用最少的代码为矩形设置动画(控件:A 和 D) Animation Sample

Xml:
 <Grid x:Name="LayoutRoot" Background="Black">
<Canvas Width="1000" Height="400" Background="Blue">
<Rectangle x:Name="rect" Width="48" Height="48"
Fill="White"
Canvas.Top="200"
Canvas.Left="0"/>
</Canvas>
</Grid>

C#:
private bool isLeft = false;
private bool isRight = false;
private DispatcherTimer timer = new DispatcherTimer();
private double lastUpdate;

public Page()
{
InitializeComponent();

timer.Interval = TimeSpan.FromMilliseconds(1);
timer.Tick += OnTick;

lastUpdate = Environment.TickCount;
timer.Start();
}

private void OnTick(object sender, EventArgs e)
{
double diff = Environment.TickCount - lastUpdate;

double x = Canvas.GetLeft(rect);

if (isRight)
x += 1 * diff;
else if (isLeft)
x -= 1 * diff;

Canvas.SetLeft(rect, x);

lastUpdate = Environment.TickCount;
}

private void UserControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.D)
isRight = true;

if (e.Key == Key.A)
isLeft = true;
}

private void UserControl_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.D)
isRight = false;

if (e.Key == Key.A)
isLeft = false;
}

谢谢!
安德烈

最佳答案

每 1 毫秒更新一次位置是多余的,因为 Silverlight 不会那么快地更新屏幕。当您像这样修改对象的位置(或任何其他 ui 更新)时,silverlight 会将帧缓冲区标记为脏,然后它最终会重绘屏幕,但是它不会比 MaxFrameRate 更频繁地重绘屏幕。 .

设置 MaxFrameRate只是:

Application.Current.Host.Settings.MaxFrameRate = 60;

这会将您的应用程序限制为每秒 60 帧,这应该绰绰有余。

关于Silverlight 动画不流畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1064439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com