0

私は現在、画面をクリックしてオブジェクトを追加できるユーザー インターフェイスに取り組んでいます。重なり合うオブジェクトは必要ありません。2 つのオブジェクト間の衝突が発生したかどうかは簡単に検出できますが、これらの衝突の解決にまだ苦労しています。

現在、侵入オブジェクトを衝突から遠ざけることで、ローカルで競合を解決しています。ただし、これにより、同じ方法で解決される新しい衝突が発生する可能性があります。残念ながら、このプロセスが停止するという保証はありません。

これに関連する標準的な問題や使用するアルゴリズムはありますか? または、無限の再帰が発生しにくい効率的なソリューションはありますか?

4

3 に答える 3

0

「グリッドスナップ」は問題を回避していますが、問題の解決策ではありません。

Sarah が指摘したように、これを解決するには、オブジェクトをランダムな距離だけ一方向に移動し、衝突があるかどうかをもう一度確認してから、衝突しているオブジェクトを移動します。ただし、これは問題の指数関数的な成長につながる可能性があります。

代わりに、オブジェクトが互いに「跳ね返り」、摩擦の使用がしばらくすると停止する光物理エンジンの実装を試すことができます。継続的な衝突回避のためにグーグルで検索してみてください。

于 2013-11-13T13:25:27.093 に答える
0

問題を解決する最も簡単な方法は、「グリッド スナップ」動作を実装することです。

基本的に、フレームには、ユーザーが UI 要素を追加できる定義済みの領域 (グリッド セル) しかありません。ユーザーが UI 要素をフレームにドロップした場合、グリッド内のどこに主にドロップするかを検出する必要があります (2 つ以上のグリッド セルに均等にドロップする場合は、独自の動作を選択できます)。このように、2 つの UI 要素間の衝突をまったく検出する必要はありません。

編集

ええと、私は確かに、あなたがコメントで概説したケースを予想していませんでした. オブジェクトのサイズがそれほど異なる場合は、「グリッド スナップ」が状況に適用できない可能性があることを認めます。つまり、多くの空きスペースが発生する可能性があります。回答を作成したとき、Visual Basic に沿った何かを考えていました (覚えている限り、VB は何らかのグリッド スナップ動作を実装しています)。

些細な点ですが、ユーザーが UI 要素の配置を正確に制御できるようにすることで、ユーザーの最善の利益を考えているかもしれませんが、ユーザーがプログラムとどのようにやり取りするかを考えてください。マウスを使用して画面上に正確に配置することは罰である可能性があり、逆効果になる可能性があります。ただし、ユーザーが常にタッチスクリーン デバイスを使用することが保証されている場合、同じことは言えません。

于 2013-11-13T10:30:49.580 に答える