2010-11-18 49 views
-1

XNA kullanarak animasyonlu bir 3D sahne görüntülemek istediğim bir panele sahip bir formum var. Bu panelin sürekli yeniden boyanmasının en iyi yolu nedir?Bir animasyonu sürmenin en iyi yolu nedir?

Şu anda forma bir System.Windows.Forms.Timer ekleme ve benim 3D sahne günceller ve panelde Invalidate çağıran Timer.Tick bir olay işleyicisi ekleyerek düşünüyorum.

Bunu yapmak için daha iyi bir yolu var mı? Oluşturma işlemi kritik değil, formun geri kalanının yanıt vermemesini istemiyorum, ancak diğer yandan, uygun zaman varsa, görüntülemenin ekranın yenileme hızında gerçekleşmesini istiyorum.

cevap

1

Evet, bir Zamanlayıcı çalışırdı. İşte bir Winforms projesinde XNA'nın nasıl kullanıldığını gösteren bir Microsoft örneğinde gördüğüm akıllı bir numara. Bu Application.Idle olayı kullanır:

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); 
    } 
} 

Ben titremeyi saklamak için bir Panelin yerine bir PictureBox kullanılan, PB DoubleBuffered mülkiyet ışığını yaktı. Bu XNA ile çok alakalı değil. Vsync kullanmak afaik çalışmayacak. Muhtemelen bu örneği kontrol etmelisiniz, denediğimde herhangi bir yırtılma olmadan 'eğirme üçgeni' tamamen pürüzsüz oldu. This thread bunun hakkında konuşuyor.

İlgili konular