我在C#windows窗体应用程序中制作炸弹人游戏。它有300多个放置在面板上的图片框(墙)。轰炸机本人的照片箱也在该小组上。
当炸弹人图片框的位置发生变化时,面板上的所有控件都会自动刷新。因为该面板上有如此多的控件,并且因为图片框的位置每秒更改多次,所以当我尝试移动时程序会变得迟钝。
我希望能够控制面板的刷新事件(以及它的控件),因为我认为只有需要刷新的图片框才能以编程方式刷新我的问题。
我希望有人可以帮我解决这个问题!
路德。
答案 0 :(得分:0)
如果您移动孩子,则必须刷新父母,因为它可能需要绘制孩子之前所在的区域。这也意味着所有孩子(父母)都会得到更新。
OTH,使用如此多的控件可能不是一个好主意。我建议你保留描述墙的数据结构,然后用它在Panel(或你的自定义控件)中绘制它。您可以通过在Panel / Parent级别捕获鼠标/键盘事件来编写自己的命中测试逻辑(鼠标或键盘在墙边界内单击)。使用正确的组织数据结构,命中测试可以非常有效。答案 1 :(得分: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