3

簡単なゲームを作ろうとしていますが、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

それを検索したのに何も見つからなかったので...

どんな助けでも大歓迎です:)ありがとう!

4

1 に答える 1

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

Falseこれにより、PictureBoxが実際にPictureBox1である場合に衝突が設定されます。ただし、各ループの衝突状態を上書きしていることに注意してください。これは、実際には必要なことではありません。1つの衝突が見つかったら、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
于 2013-03-09T13:38:28.477 に答える