假设我使用DrawImage几次绘制一堆图像。
e.Graphics.DrawImage(newImage, destRect);
如何从我绘制的图形纸张中删除特定图像? 是否有可用于删除的特定功能?
我已尝试过dispose
和Rectangle.Empty
,但实际上并没有删除我在纸上绘制的图片。
答案 0 :(得分:1)
每一帧,你必须从头开始重绘。这包括球,球拍和砖块清单(以及你需要的任何其他东西,比如得分等)。
希望这可以解决你的困惑。
答案 1 :(得分:1)
首先,GDI + Graphics中没有“删除对象”的概念。您必须在每个帧中重绘整个客户区。您应该在内存中保留对象及其状态列表,并在每个帧中重绘整个表面。但要注意,这可能导致闪烁和不那么流畅的用户体验。以下是一些避免这些的提示:
确保您的Form或UserControl的DoubleBuffered
属性设置为True。这将导致动画更加平滑。
永远不要调用CreateGraphics()
来获取绘图循环中Graphics对象的引用。更新循环中的对象和状态列表,然后在控件/表单上调用Invalidate()
,并在Paint
事件中执行绘图过程。
Invalidate()
的一个重载允许您指定需要失效的矩形(重绘)。您可以在弹跳球的当前位置周围传递一个“安全”矩形(比球大小宽20个/更高)作为agrument,然后在Paint
事件中仅绘制该部分。
为了进一步提高性能,您可以在实际“游戏板”之外保留分数,玩家姓名等辅助信息,并使用普通标签/文本框代替绘图。