2017-06-01 35 views
0

我想爲我的C#程序製作動畫。有一個太空火箭,以25毫秒的時間間隔垂直上升8個像素。我設法制作了動畫,但由於picturebox的背景(我用於火箭)被設置爲透明,所以它每次移動時都會閃爍窗體的背景圖像。我能做些什麼來防止它?C#動畫與定時器閃爍背景

Screenshot

我使用計時器滴答代碼:

pictureBox1.Top -= 8; 

PS:我試着面板更改PictureBox的,緩慢擊落火箭和計時器,但似乎沒有什麼改變。

+0

這是winforms還是WPF? –

+0

它是winforms。 –

+0

涉及的其他控件?表單具有doubelbuffered = true?大多數情況下,動畫通過在Paint事件中繪製它們而不是移動控件來發揮最佳效果。 – TaW

回答

1

嗯,我現在還沒有嘗試過。 需要有一個渲染事件,您可以使用該渲染事件並對您的UI進行操作,從而順利渲染。

Control.Paint

試試這樣的:

private void Form1_Load(object sender, System.EventArgs e) 
{ 
    pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint); 
} 

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
     pictureBox1.Top -= 8; 
} 

同樣,這沒有經過測試,我還沒有開發的WinForms爲年齡任何事情。但是,這是您應該順利進行渲染的方向。

上面提到的雙重緩衝的東西在某些情況下也是一個因素。 但這主要是這樣做的方式。

+0

我試過在我的代碼中實現這個,但正如我在帖子中提到的那樣,在我的代碼中有25ms的間隔會使火箭放慢速度。但是由於沒有什麼可以減慢代碼中的火箭速度,所以飛行速度非常快。我能做些什麼來讓它變慢? –

+0

恩,那會有幫助嗎?你應該在Paint中做一個e.Graphics.DrawImage(image,x,y),而不是再次移動這個pbox! – TaW

+1

即時通訊不是一個winforms開發者,你可能是正確的。我的觀點是在繪畫事件中操縱UIi –