图例框之间的VB.NET冲突

时间:2013-03-09 13:33:01

标签: vb.net picturebox intersect

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

我已经弄清楚这是怎么做的,但它只适用于我的角色和另外一个图片框:

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个单独的图片框,而不适用于表单中的所有图片框。 我不明白为什么...... 如果有人知道如何在每个函数中添加异常,那么我可以保留我的picturebox1

这样的事可能

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

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

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

1 个答案:

答案 0 :(得分: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

如果PictureBox确实是PictureBox1,这会将碰撞设置为False。但请注意,您正在覆盖每个循环中的碰撞状态,这不是您真正想要的。当发现一次碰撞时,你应该退出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