假設我使用DrawImage幾次繪製一組圖像。如何從圖形中刪除圖像
e.Graphics.DrawImage(newImage, destRect);
如何刪除從圖形紙,我畫了一個具體的形象? 是否有可用於刪除的特定功能?
我試過dispose
和Rectangle.Empty
,但是他們實際上並沒有刪除我已經在紙上畫的圖像。
假設我使用DrawImage幾次繪製一組圖像。如何從圖形中刪除圖像
e.Graphics.DrawImage(newImage, destRect);
如何刪除從圖形紙,我畫了一個具體的形象? 是否有可用於刪除的特定功能?
我試過dispose
和Rectangle.Empty
,但是他們實際上並沒有刪除我已經在紙上畫的圖像。
首先,在GDI +圖形中沒有「刪除對象」的概念。您必須在每個框架中重新繪製整個客戶區域。您應該在內存中保留一個對象及其狀態的列表,並在每一幀中重新繪製整個表面。但要小心,這會導致閃爍和不那麼流暢的用戶體驗。這裏有一些提示,以避免這些:
確保您的窗體或用戶控件都有DoubleBuffered
屬性設置爲True。這將導致比其他方式更平滑的動畫。
永遠不會調用CreateGraphics()
來獲得對繪圖循環中Graphics對象的引用。更新您的循環中的對象和狀態列表,然後在控件/表單上調用Invalidate()
,並在Paint
事件中執行繪製過程。
Invalidate()
的一個重載允許您指定需要失效(重繪)的矩形。您可以在彈跳球的當前位置周圍傳遞一個「安全」矩形(比球大小寬20個像素)作爲填充,然後在您的Paint
事件中僅繪製該部分。
爲了進一步提高性能,您可以在實際「遊戲板」之外保留輔助信息,例如分數,玩家名等,並使用普通標籤/文本框代替繪圖。
krikara,你應該做的是:
每框架,您必須從頭開始重繪所有內容。這包括球,槳和磚的列表(以及其他任何你需要的東西,比如比分等)。
希望這可以消除你的困惑。
是的,這是目前我正在處理的。 – krikara 2013-04-06 15:32:22
刪除,你的意思是重繪之前有什麼,或只是用純色覆蓋?一旦你在圖形上畫了一些東西,它下面的東西就消失了。 – 2013-04-06 00:59:34
嗯,我正在尋找一種方法來刪除矩形。我正試圖實現一個遊戲突破遊戲,我有一個球,槳和一堆磚。一旦球擊中磚塊,磚塊(矩形)應該被移除。我已經把球從磚塊上彈起來了,我正試圖想出一種方法來永久地移除每一塊磚塊,這樣球就不會從空間中回彈。 – krikara 2013-04-06 01:02:38
「Graphics」對象沒有「刪除」的概念。您必須重新繪製磚背後的背景來自其他來源。 – 2013-04-06 01:08:05