0

假设我多次使用 DrawImage 来绘制一堆图像。

e.Graphics.DrawImage(newImage, destRect);

如何从我绘制的图形纸中删除特定图像?是否有可以用于删除的特定功能?

我试过disposeand Rectangle.Empty,但他们实际上并没有删除我已经在纸上画的图像。

4

2 回答 2

1

krikara,你应该做的是:

  1. 跟踪列表中的所有积木
  2. 当球击中砖块时,从列表中删除该砖块

每一帧,你都必须从头开始重绘一切。这包括球、桨和积木列表(以及您需要的任何其他内容,例如得分等)

希望这可以消除您的任何困惑。

于 2013-04-06T06:16:05.770 回答
1

首先,GDI+ Graphics 中没有“删除对象”的概念。您必须在每一帧中重新绘制整个客户区。您应该在内存中保留对象及其状态的列表,并在每一帧中重绘整个表面。但请注意,这可能会导致闪烁和不那么流畅的用户体验。以下是避免这些情况的一些提示:

  1. 确保您的 Form 或 UserControl 的DoubleBuffered属性设置为 True。这将产生比其他方式更平滑的动画。

  2. 永远不要调用CreateGraphics()在绘图循环中获取对 Graphics 对象的引用。更新循环中的对象和状态列表,然后调用Invalidate()控件/表单并在Paint事件中执行绘图过程。

  3. 的一个重载Invalidate()允许您指定需要无效(重绘)的矩形。您可以在弹跳球的当前位置(例如比球大小宽/高 20 像素)周围传递一个“安全”矩形作为 agrument,然后在您的Paint事件中仅绘制该部分。

  4. 为了进一步提高性能,您可以将分数、玩家姓名等辅助信息保留在实际“游戏板”之外,并为它们使用普通标签/文本框而不是绘图。

于 2013-04-06T06:30:57.260 回答