我想爲我的C#程序製作動畫。有一個太空火箭,以25毫秒的時間間隔垂直上升8個像素。我設法制作了動畫,但由於picturebox的背景(我用於火箭)被設置爲透明,所以它每次移動時都會閃爍窗體的背景圖像。我能做些什麼來防止它?C#動畫與定時器閃爍背景
我使用計時器滴答代碼:
pictureBox1.Top -= 8;
PS:我試着面板更改PictureBox的,緩慢擊落火箭和計時器,但似乎沒有什麼改變。
我想爲我的C#程序製作動畫。有一個太空火箭,以25毫秒的時間間隔垂直上升8個像素。我設法制作了動畫,但由於picturebox的背景(我用於火箭)被設置爲透明,所以它每次移動時都會閃爍窗體的背景圖像。我能做些什麼來防止它?C#動畫與定時器閃爍背景
我使用計時器滴答代碼:
pictureBox1.Top -= 8;
PS:我試着面板更改PictureBox的,緩慢擊落火箭和計時器,但似乎沒有什麼改變。
嗯,我現在還沒有嘗試過。 需要有一個渲染事件,您可以使用該渲染事件並對您的UI進行操作,從而順利渲染。
試試這樣的:
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爲年齡任何事情。但是,這是您應該順利進行渲染的方向。
上面提到的雙重緩衝的東西在某些情況下也是一個因素。 但這主要是這樣做的方式。
我試過在我的代碼中實現這個,但正如我在帖子中提到的那樣,在我的代碼中有25ms的間隔會使火箭放慢速度。但是由於沒有什麼可以減慢代碼中的火箭速度,所以飛行速度非常快。我能做些什麼來讓它變慢? –
恩,那會有幫助嗎?你應該在Paint中做一個e.Graphics.DrawImage(image,x,y),而不是再次移動這個pbox! – TaW
即時通訊不是一個winforms開發者,你可能是正確的。我的觀點是在繪畫事件中操縱UIi –
這是winforms還是WPF? –
它是winforms。 –
涉及的其他控件?表單具有doubelbuffered = true?大多數情況下,動畫通過在Paint事件中繪製它們而不是移動控件來發揮最佳效果。 – TaW