我寫了一個程序,繪製了一個棋盤遊戲的具體情況(我認爲它被稱爲「Ludo」)。現在我可以畫出所有的場地和棋子等,但如果一個棋子移動了,我必須重畫那個棋子。問題是,當我這樣做時,屏幕會閃爍很短的時間。這可能是因爲我首先清除了所有的字段和棋子,然後重新繪製它們(我會改進它,但問題會以更小的形式出現,我認爲)仍然會出現,屏幕在我清除之間閃爍一切,直到我重繪了一切。有沒有辦法告訴C#在我告訴它之前不要重新繪製,即使我專門調用了像this.Controls.Clear()
之類的東西?在函數的持續時間內強制不繪畫
我已經用this.SuspendLayout()
試過了,因爲名字暗示它應該這樣做,但那不行。
剛試過this.DoubleBuffered = true;它確實減少了閃爍,但它仍然沒有消失 – teuneboon 2011-03-28 20:59:35
這裏描述了更多更具體的緩衝選項,這對我的圖表繪製項目非常有用。點擊:http://www.codeproject.com/KB/graphics/DoubleBuffering.aspx – thmshd 2011-03-28 21:03:33
如果.NET雙緩衝實現不適合你,你應該嘗試實現你自己的緩衝機制,將你的繪圖緩存到位圖,然後渲染整個位圖。您正在經歷屏幕撕裂,因爲您基本上迫使您的顯示設備連續快速刷新屏幕的多個部分。您希望最小化對顯示器的繪製請求數量。 – 2011-03-28 21:04:28