代码之家  ›  专栏  ›  技术社区  ›  Andreas Brinck

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

c#
  •  -1
  • Andreas Brinck  · 技术社区  · 14 年前

    我有一个带有面板的表单,我想在其中使用XNA显示动画三维场景。什么是最好的方式让这个面板不断地重新油漆?

    我正在考虑增加一个 System.Windows.Forms.Timer 将事件处理程序添加到窗体 Timer.Tick 更新我的3D场景并调用 Invalidate 在面板上。

    有更好的办法吗?渲染并不重要,我不希望表单的其他部分变得不响应,但另一方面,如果有时间,我希望渲染以监视器的刷新率进行。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    8 年前

    是的,计时器可以工作。下面是我在微软的一个例子中看到的一个聪明的技巧,它展示了如何在Winforms项目中使用XNA。它使用应用程序。空闲事件:

    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而不是一个面板来隐藏闪烁,PB打开了DoubleBuffered属性。不过,这与XNA没有太大关系。使用vsync是行不通的。你可能应该看看这个例子,当我试着看的时候,“旋转三角形”是完全平滑的,没有任何撕裂。 This thread 谈谈这个。