0

私の例をPIANOイメージとして考えてみましょう..キーボードのキーを押すたびに、別のイベントを実行したい..今、どこから始めればよいのかわかりません..Androidでこれを実行する方法..

下の画像を取る:

ここに画像の説明を入力

画像でわかるように、私はピアノの画像を持っています..そして、いくつかの形で赤と青の線を描きました..今、私はこの画像の各形状に対して異なるイベントを実行したい..どうすればAndroidプログラミングでこれを行うことができますか..

4

1 に答える 1

0

これは、基本的な衝突検出の問題のようです。

基本的にやりたいことは、もちろん画面のタッチを聞いて、タッチ位置の X と Y を受け取ることです。(もちろん、マルチタッチを使用できます。タッチごとにこれを行うことを忘れないでください)

タッチが表示されるとcontainsRectanglePoint、画像の各キーの束が計算されます。

したがって、基本的には、画像をそのように多くの長方形に分割します。

画像
(出典:gyazo.com

次に、ポイントに長方形が含まれているかどうかを確認します。

  • タッチ X & Y が 1 または 2 内にある場合、そのキーのイベントを実行します。
  • タッチ X & Y が 3、4、または 5 のいずれかにある場合、そのキーのイベントを実行します。
  • タッチ X と Y がいずれかの 6 内にある場合は、そのキーのイベントを実行します。
  • タッチ X と Y がいずれかの 7 内にある場合は、そのキーのイベントを実行します。

もちろん、すべてのキーに対してこれを行います。

したがって、衝突が発生した場合は、そのすべてに目を通します。

単純な長方形と点の衝突検出

次のコードは、四角形と点の間の衝突検出をチェックします。ポイントが長方形の境界内にある場合、メソッドは 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= ポイント X
  • py= ポイント Y

あなたの場合、 px&pyはタッチの場所です。

Java の標準Rectangle2Dクラスを使用して、衝突の保存と計算の両方を行うこともできますが、それにはクラスのインスタンスを多数作成する必要があり、メモリについて話している場合は、座標を保存してから保存する方がはるかに安価になります。私があなたに提供した機能を使用してください。

于 2013-08-17T11:50:45.237 に答える