什么是驱动动画的最佳方式?

时间:2010-11-18 07:00:09

标签: c#

我有一个带有面板的表单,我想在其中使用XNA显示动画3D场景。让这个面板不断重新粉刷的最佳方法是什么?

我目前正在考虑向表单添加System.Windows.Forms.Timer并向Timer.Tick添加事件处理程序,以更新我的3D场景并在面板上调用Invalidate

有更好的方法吗?渲染并不重要,我不希望表单的其余部分变得反应迟钝,但另一方面,如果有时间可用,我希望渲染以监视器的刷新率发生。

1 个答案:

答案 0 :(得分:1)

是的,Timer会起作用。这是我在Microsoft示例中看到的一个聪明的技巧,它展示了如何在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);
    }
}

我使用PictureBox而不是Panel来隐藏闪烁,PB打开了DoubleBuffered属性。但这与XNA无关。使用vsync不会起作用。你可能应该看看那个例子,当我尝试它时,'旋转三角形'是完全光滑的,没有任何撕裂。 This thread谈论它。