C# Windows Formsで接触判定を作る|BoundsとIntersectsWithをやさしく解説
この題材では、コントロールの位置とサイズを表すBoundsプロパティ、矩形同士の重なりを調べるIntersectsWithメソッドをまとめて学べます。ここで学ぶ考え方は、Timerで動くオブジェクト同士の当たり判定にもそのまま応用できます。

1. Boundsでコントロールの位置とサイズを取得する
WinFormsのコントロール(Button、PictureBox など)は、それぞれBoundsというプロパティを持っています。Boundsは、そのコントロールの位置(X, Y)とサイズ(Width, Height)をまとめて表すRectangle(矩形)です。
Rectangle rect = pictureBox1.Bounds;
コントロールを動かすたびにBoundsの値も自動的に更新されるため、「今どこにあるか」を自分で計算し直す必要がありません。
2. IntersectsWithで重なりを調べる
2つの矩形が重なっているかどうかは、Rectangle.IntersectsWithメソッドで調べられます。
if (button1.Bounds.IntersectsWith(pictureBox1.Bounds))
{
// 接触したときの処理
}
button1.BoundsとpictureBox1.Boundsという2つの矩形を比較し、少しでも重なっていればtrue、まったく重なっていなければfalseを返します。座標の大小関係を自分で計算する必要がなく、1行で判定できるのが利点です。
3. サンプル:2つのPictureBoxが重なったか判定する
ボタンをクリックするたびに一方のPictureBoxを動かし、もう一方と重なったらラベルに表示する、最小構成のサンプルです。
private void buttonMove_Click(object sender, EventArgs e)
{
// pictureBox1 を少し右に動かす
pictureBox1.Left += 20;
// pictureBox2 と重なっているか判定
if (pictureBox1.Bounds.IntersectsWith(pictureBox2.Bounds))
{
labelResult.Text = "接触しました!";
}
else
{
labelResult.Text = "まだ離れています";
}
}
ボタンを押すたびにpictureBox1が右へ移動し、pictureBox2に重なった時点で判定がtrueに切り替わります。動きの仕組みそのものは単純ですが、これが接触判定の基本形です。
4. まとめ
今回は、WinFormsで接触判定を行う基本の仕組みを学びました。
- コントロールの位置とサイズは
Boundsプロパティ(Rectangle)で取得できる - 2つの
Boundsが重なっているかはIntersectsWithメソッドで判定できる - 座標を自分で計算しなくても、1行で「重なっているか」がわかる
このBoundsとIntersectsWithの組み合わせは、ボタンのような静止したコントロール同士だけでなく、Timerで動き続けるコントロール同士の判定にもそのまま使えます。次のステップとして、実際に動くオブジェクト同士の接触判定を体験してみたい人は、落ち物キャッチゲームの記事もあわせて読んでみてください。








ディスカッション
コメント一覧
まだ、コメントがありません