3

我正在尝试制作一个简单的游戏,我需要知道图片框1(我的角色)是否与其他图片框(墙壁)发生碰撞。

我已经弄清楚了如何做到这一点,但它只适用于我的角色和其他 1 个图片框,例如:

If picturebox1.bounds.intersectWith(picturebox2.bounds) then
   collision = true
end if

我试图做这样的事情:

For Each PictureBox In Me.Controls
  If PictureBox1.Bounds.IntersectsWith(PictureBox.Bounds) Then
     collision = True
  Else : collision = False
  End If
Next

但是布尔碰撞总是正确的,因为picturebox1(角色)总是与自己相交。

所以我将图片框更改为面板,代码如下所示:

For Each PictureBox In Me.Controls
  If Panel1.Bounds.IntersectsWith(PictureBox.Bounds) Then
     collision = True
  Else : collision = False
  End If
Next

但它仅适用于 1 个单个图片框,不适用于表单中的所有图片框。我不明白为什么......如果有人可能知道如何在每个函数中添加一个异常,这样我就可以保留我的图片框1

像这样的东西

For each picturebox(except(picturebox1)) in me.controls

因为我已经搜索过但没有找到任何东西......

非常感谢任何帮助:) 谢谢!

4

1 回答 1

1

一种方法:

For Each PictureBox In Me.Controls
  If PictureBox IsNot PictureBox1 AndAlso PictureBox1.Bounds.IntersectsWith(PictureBox.Bounds) Then
     collision = True
     Exit For 'Exit when at least one collision found 
  Else : collision = False
  End If
Next

False如果 PictureBox 确实是 PictureBox1 ,这将设置碰撞。但请注意,您正在覆盖每个循环中的碰撞状态,这不是您真正想要的。当发现一次冲突时,您应该退出 for 循环(请参阅我的代码)。您也可以像这样更改您的代码:

collision = False
For Each PictureBox In Me.Controls
  If PictureBox IsNot PictureBox1 AndAlso PictureBox1.Bounds.IntersectsWith(PictureBox.Bounds) Then
     collision = True
     Exit For
  End If
Next
于 2013-03-09T13:38:28.477 回答