2010-11-18 50 views
-1

我有一個窗體,其中我想用XNA顯示動畫3D場景。讓這個面板連續重新繪製的最佳方式是什麼?駕駛動畫的最佳方式是什麼?

我目前正在考慮在窗體中添加一個System.Windows.Forms.Timer並添加一個事件處理程序到Timer.Tick,這會更新我的3D場景並在面板上調用Invalidate

有沒有更好的方法來做到這一點?渲染並不重要,我不希望表單的其餘部分變得無反應,但另一方面,如果有時間可用,我希望渲染以監視器的刷新率發生。

回答

1

是的,計時器將工作。這是一個巧妙的技巧,我在一個微軟的例子中看到了這個例子,它展示瞭如何在Winforms項目中使用XNA。它採用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不會起作用。你可能應該看看這個例子,當我嘗試它時,「旋轉三角形」完全平滑,沒有任何撕裂。 This thread談論它。

相關問題