2011-01-20 26 views
3

我正在C#窗體表單應用程序中製作炸彈人遊戲。它有300多個放置在面板上的圖畫框(牆)。炸彈人的畫箱本身也在該面板上。C#只有刷新圖片框/面板時,告訴他們刷新?

當bombermans picturebox的位置發生變化時,面板上的所有控件都會自動刷新。由於該面板上有太多的控件,並且由於picturebox的位置每秒會改變多次,所以當我嘗試移動時,該程序會變得遲緩。

我想要控制面板(及其控件)的刷新事件,因爲我認爲只有需要刷新的picturebox才能通過編程方式刷新問題。

我希望有人能幫助我這個!

Ruud。

+1

請勿使用圖片框。重寫窗體的OnPaint()方法並使用e.Graphics.DrawImage()繪製牆。 – 2011-01-20 08:50:32

回答

0

如果移動孩子,父母必須刷新,因爲它可能需要繪製孩子以前所在的區域。這也意味着(父母)的所有孩子都會得到更新。

OTH,使用如此多的控件可能不是一個好主意。我建議你保留描述牆的數據結構,然後用它在Panel(或你的自定義控件)中繪製它。通過在面板/父級別捕獲鼠標/鍵盤事件,您可以編寫自己的命中測試邏輯(鼠標或鍵盤在牆邊界內點擊)。有了正確的組織數據結構,點擊測試可以非常有效。

+0

最後一段沒有參數。 – 2011-01-20 08:47:49

0

您正在嘗試繪製整個表格,這肯定需要時間。如果你只想改變表格的一部分,在你的情況下是將炸彈人移動到新的位置,只需使你想要重新繪製的區域失效,然後將它傳遞給Invalidate方法。

做一些類似的事情。

//Invalidate previous position of bomberman 
Rectangle invalid = new Rectangle(picturebox1.Location.x,picturebox1.Location.y,picturebox1.Width,picturebox1.Height); 
Invalidate(invalid); 
//Add code to move your picture box and then call above two lines again 
invalid = new Rectangle(picturebox1.Location.x,picturebox1.Location.y,picturebox1.Width,picturebox1.Height); 
Invalidate(invalid); 

注肯定,但財產以後類似拋光的代碼將工作...

這裏是供參考的例子的鏈接。 http://msdn.microsoft.com/en-us/library/ms229628.aspx

+0

這已經自動發生,根本不寫任何代碼。 – 2011-01-20 08:47:25