2

HTML5キャンバス(KineticJSライブラリを使用しています)で衝突を検出する必要があります。これまで、特定のポイントが特定の形状内にあるかどうかを検出するために独自のメソッドを使用してきました。

私は最近、ContainerクラスのメソッドgetIntersections(point)があることに気付きました。これは、私が望むことを正確に実行する必要があります。ただし、非常に遅いように見えるため、キャンバス上でオブジェクトを移動し、新しい位置ごとにこのメソッドを使用すると、使用できなくなります。

誰かが衝突検出にこの方法を使用しましたか?そうでない場合、HTML5キャンバスでの衝突検出に関するヒントはありますか?ポイントが特定の角度だけ回転した長方形の内側にあるかどうかを検出するのに問題があります。

4

3 に答える 3

1

同じことに気づきました。getIntersectionsには長い時間がかかります。また、マウスイベントなども呼び出され、さらに悪化します。

速度を上げる方法はわかりませんが、速度に大きく影響するのは、ステージ上にあるシェイプの数です。したがって、処理を高速化する1つの方法は、不要なシェイプを不要なときに削除し、必要なときに動的に戻すことです。

于 2012-11-30T11:02:05.810 に答える
1

私はモバイルゲーム(航空交通管制のシミュレーション)でgetIntersection()を使用しましたが、ゲームフレーム内の既存のすべての飛行機間の衝突を検出するために何度も呼び出されたことを考えると、非常にうまく機能しました。特定のポイントを1つだけ検出する必要がある場合、考えられる解決策は、その場所に非常に小さなダミーの長方形を追加し、それと交差するすべてのオブジェクトのリストを取得して、このリストを反復処理することです。対象のオブジェクトに名前を付けると、状態の検証を高速化できます。

于 2012-12-04T23:05:22.707 に答える
1

https://github.com/ericdrowell/KineticJS/issues/150

これはまさにあなたが必要とするものです。

わかりやすくするために、マウスの位置に基づいて交差する形状を取得するには、次の2つの方法があります。

1)getIntersection()-推奨2)getIntersections()-非常に遅いため、特別な状況で使用する必要があります

getIntersection()メソッドは非常に高速で、交差点に関する情報(KineticJS形状がある場合はそれへの参照、ピクセルカラー情報など)を含むオブジェクトを返します。

getIntersections()メソッドは同じことを行いますが、ステージ内のすべてのノードを繰り返して再描画し、互いに重なっている可能性のある交差のコレクションを返します。

100回のうち99回は、その下のノードの上部にある、表示されている交差ノードに関心があるだけです。

私は実際にgetIntersections()メソッドを完全に削除することを検討しましたが、実際に交差点のコレクションが必要な特別な状況があるため、そうしませんでした。現時点では、getIntersectionsを高速化する方法を見つけることができませんでしたが、調査を続けます。

于 2014-02-13T07:38:47.587 に答える