Silverlightで時間/フレームに基づいてオブジェクトをアニメートしようとすると(たとえば、高速アニメーションのゲームには適していないDoubleAnimationやStoryboardなどと違って)、たとえば特定の方向に宇宙船を移動する動きが激しく、滑らかではありません。画面が裂けているように見えます。Silverlightアニメーションがスムーズでない
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です。 このサンプルで説明した効果はあまり一般的ではありませんが、カンバス上で単一の矩形を動かすとぎこちないアニメーションが作成されることが保証されます。
これを最小限に抑える方法がありますか?これを解決できるStoryboards/DoubleAnimationsを使用して、フレームベースのアニメーションを実行する他の方法はありますか?
編集:ここでは、迅速かつ汚いアプローチ、最小のコードで矩形をアニメーション(対照:AおよびD)Animation Sample
XAML:
<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;
}
おかげ! Andrej
+1私は、吃音、裂け、ちらつきのために、ゲームをSilverlight 3で作成しようとしました... 4でこれを解決したのか、それとも滑らかなアニメーションのためにPowerpointほど役に立たないのだろうか? AMOSの20歳以上の私のアミーガは、この部門のより優れたパフォーマーであり、より簡単な開発プラットフォームです) –
私は最近同様の質問をしました。私はそれが私のハードウェアと関係があると思った:MacBookデュアルブート(ブートキャンプ)、私は私が持っている他のすべてのWindows PCで同じ問題を抱えていた。私が右にマークした答えは実際に問題を解決しなかったことに注意してください...私はストーリーボードが単純な長方形を動かす場合でもこの問題を観察しました。私はこれがすぐに修正されることを願っていますhttp://stackoverflow.com/questions/5319562/silverlight-fast-moving-bitmap-does-not-update-smoothly –