Конфликт VB.NET между графическими ящиками

Я пытаюсь сделать простую игру, и мне нужно знать, сталкивается ли ящик с картинками1 (мой персонаж) с другими ящиками с картинками (стенами).

Я уже разобрался, как это сделать, но это работает, например, только с моим персонажем и 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

потому что я искал это, но ничего не нашел...

Любая помощь приветствуется :) Спасибо!


person user2151534    schedule 09.03.2013    source источник


Ответы (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

Это установит коллизию в 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
person Abdusalam Ben Haj    schedule 09.03.2013