VB.NET中PictureBox之间的碰撞问题

3

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

我已经找出了如何做到这一点,但它只对我的角色和另一个picturebox有效,例如:

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(角色)与自身相交,则布尔碰撞始终为真。

所以我将picturebox更改为面板,并且代码如下:

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

但它只适用于一个单独的图片框,而不是表单中的所有图片框。我不明白为什么……如果有人知道如何添加一个异常在循环函数中,以便我可以保留我的picturebox1,就请告诉我。可能像这样:
For each picturebox(except(picturebox1)) in me.controls

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

非常感谢您的帮助 :) 谢谢!

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

如果 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接