3

オブジェクト/シェイプごとに contains(MousePoint) を呼び出してピッキングを実装した時点で、java2d を使用して単純なグラフを描画しています。これは機能しますが、線形にスケーリングします。

java2dでピッキングするためのより効率的な方法はありますか?

4

2 に答える 2

4

はい。ただし、完全な回答はこのスペースには長すぎます。

まず第一に、多くのノードを持っていない限り、線形で問題ない可能性が高く、パフォーマンスが低下していることがすでに確認されていない限り、何も変更しないでください。

第二に、一般に、 quadtreeなどのある種の階層分解を適用する必要があります。これは、いわゆる「大まかなフェーズ」でアイテムを考慮から除外するために、より多くのメモリ (および検索中に償却される前もってより多くの時間) を使用する方法です。Christer Ericson著の書籍「 Real-Time Collision Detection 」と同様に、Web での注意が役立ちます。

于 2009-12-08T15:30:59.613 に答える
1

領域形状 (長方形、円) のみを選択している限り、contains() メソッドで機能するはずです。図形が重なり合っていて、図形が実際に重なり合っている場所を指した場合に備えて、落とし穴が 1 つだけあります。ただし、すべての図形を選択するか、一番上の図形を選択するか、コレクションで最初に見つけた図形を選択するかは、要件の問題です。

Line2D タイプのシェイプを選択する場合、contains() メソッドは機能しません。それらには領域がないため、contains() メソッドは常に false を返します。しかし、この問題に対する SOの解決策は既にあります。

于 2009-12-08T15:42:22.407 に答える