2010-11-18 18 views
-1

XNAを使ってアニメーション3Dシーンを表示したいパネルがあるフォームがあります。このパネルを連続的に塗り直すにはどうすればいいですか?アニメーションを駆動する最適な方法は何ですか?

フォームにSystem.Windows.Forms.Timerを追加し、イベントハンドラをTimer.Tickに追加すると、3Dシーンが更新され、Invalidateがパネルに表示されます。

これを行うより良い方法はありますか?レンダリングは重要ではありませんが、フォームの残りの部分が応答しなくなることは望ましくありませんが、利用可能な時間がある場合は、モニターのリフレッシュレートでレンダリングを実行したいと考えています。

答えて

1

はい、タイマーが機能します。 WinformsプロジェクトでXNAを使用する方法を示したMicrosoftの例で使用された、巧妙なトリックです。それはApplication.Idleイベントを使用しています。

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint); 
     Application.Idle += new EventHandler(Application_Idle); 
     this.FormClosed += delegate { Application.Idle -= Application_Idle; }; 
    } 

    private void Application_Idle(object sender, EventArgs e) { 
     pictureBox1.Invalidate(); 
    } 

    int cnt; 
    void pictureBox1_Paint(object sender, PaintEventArgs e) { 
     cnt++; 
     e.Graphics.DrawString(cnt.ToString(), this.Font, Brushes.Black, 0, 0); 
    } 
} 

私はちらつきを隠すために、パネルの代わりにピクチャボックスを使用し、PBはDoubleBufferedプロパティがオンになっています。 XNAにはあまり関係しません。 vsyncを使用してもafaikは動作しません。あなたはたぶんその例をチェックアウトするべきです、私はそれを試したときに裂けることなく完全に滑らかだった "回転三角形"。それについてThis threadが話します。

関連する問題