我正在尝试制作一个简单的游戏,我需要知道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
因为我已经搜索过但却找不到任何东西......
非常感谢任何帮助:) 谢谢!
答案 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