user2151534 user2151534 - 7 months ago 14
Vb.net Question

VB.NET collision between pictureboxes

I'm trying to make a simple game and i need to know if picturebox1( my character) collides with other pictureboxes ( the walls).

I have already worked out how do this but it only works with my character and 1 other picturebox for example:

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


I tried to do something else like this:

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


But then the boolean collision would always be true because picturebox1 (the character) always intersects with itself.

So i changed the picturebox into a panel and the code looks the following:

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


But it only works with 1 single picture box and not with all the pictureboxes in the form.
I don't understand why...
And if anyone maybe knows how to add an exception in the for each function so i can keep my picturebox1

something like this maybe

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


because i've searched for that but didn't find anything...

Any help is greatly appreciated :)
Thanks!

Answer

One way of doing it:

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

This would set collision to False if PictureBox is indeed PictureBox1. But note that you are overwriting the collision state in each loop, which not what you really want. You should exit the for loop when one collision is found (see my code). You may also change your code like this :

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