我正在尝试制作一个简单的游戏,我需要知道 picturebox1(我的角色)是否与其他 picturebox(墙壁)发生碰撞。
我已经弄清楚了如何做到这一点,但它仅适用于我的角色和其他 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 个图片框,不适用于表单中的所有图片框。
我不明白为什么...
如果有人知道如何在每个函数中添加例外,这样我就可以保留我的 picturebox1
也许是这样的
For each picturebox(except(picturebox1)) in me.controls
因为我已经搜索过但没有找到任何东西......
任何帮助是极大的赞赏 :)
谢谢!
一种方法是:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)