私の例をPIANOイメージとして考えてみましょう..キーボードのキーを押すたびに、別のイベントを実行したい..今、どこから始めればよいのかわかりません..Androidでこれを実行する方法..
下の画像を取る:
画像でわかるように、私はピアノの画像を持っています..そして、いくつかの形で赤と青の線を描きました..今、私はこの画像の各形状に対して異なるイベントを実行したい..どうすればAndroidプログラミングでこれを行うことができますか..
私の例をPIANOイメージとして考えてみましょう..キーボードのキーを押すたびに、別のイベントを実行したい..今、どこから始めればよいのかわかりません..Androidでこれを実行する方法..
下の画像を取る:
画像でわかるように、私はピアノの画像を持っています..そして、いくつかの形で赤と青の線を描きました..今、私はこの画像の各形状に対して異なるイベントを実行したい..どうすればAndroidプログラミングでこれを行うことができますか..
これは、基本的な衝突検出の問題のようです。
基本的にやりたいことは、もちろん画面のタッチを聞いて、タッチ位置の X と Y を受け取ることです。(もちろん、マルチタッチを使用できます。タッチごとにこれを行うことを忘れないでください)
タッチが表示されるとcontainsRectanglePoint
、画像の各キーの束が計算されます。
したがって、基本的には、画像をそのように多くの長方形に分割します。
(出典:gyazo.com)
次に、ポイントに長方形が含まれているかどうかを確認します。
もちろん、すべてのキーに対してこれを行います。
したがって、衝突が発生した場合は、そのすべてに目を通します。
次のコードは、四角形と点の間の衝突検出をチェックします。ポイントが長方形の境界内にある場合、メソッドは true を返します。そうでない場合は false を返します。
public static boolean containsRectanglePoint(double x, double y, double w, double h, double px, double py)
{
if (px < x) { return false; }
if (py < y) { return false; }
if (px > (x + w)) { return false; }
if (py > (y + h)) { return false; }
return true;
}
x
= 長方形 X (または AABB 最小 X)y
= 長方形 Y (または AABB 最小 Y)w
= 長方形の幅 (または AABB 最大 X - AABB 最小 X)h
= 長方形の高さ (または AABB の最大 Y - AABB の最小 Y)px
= ポイント Xpy
= ポイント Yあなたの場合、 px
&py
はタッチの場所です。
Java の標準Rectangle2D
クラスを使用して、衝突の保存と計算の両方を行うこともできますが、それにはクラスのインスタンスを多数作成する必要があり、メモリについて話している場合は、座標を保存してから保存する方がはるかに安価になります。私があなたに提供した機能を使用してください。