1

(最初に、念のため言っておきますが、六角形は 6 つの点を持つ多角形です。ハニカムやシヴィライゼーション 5 を考えてみてください)

六角形のグリッドを使用するゲームを作成していますが、境界ボックスを正しく取得できないようです。Javas API は、長方形の「BB」(getBounds および getBounds2D) についてのみ教えてくれます。

私は形を描いて、本来あるべきように整列させましたが、セルが互いに正確に隣接するようにしたいのですが、エッジが互いに入るか、互いに隣り合っていますが、それらの間に1ピクセルすらありません。BBが長方形の場合、これは現在不可能です。

これが完全に不可能な場合は、コンポーネントのサイズを小さくして全体を描画する方法があるでしょうか? そうすれば、六角形の真ん中にまたがる通常の長方形を作成できますが、2 つの「点」が役に立たないままになりますが、これは良くありません。

ありがとう<3

4

1 に答える 1

3

境界ボックスは、定義上、ボックス (別名、長方形) です。いいえ、長方形以外の境界ボックスを作成することはできません。

長方形以外のウィンドウ、クリッピング領域などを作成することは可能ですが、そのようなものを囲むボックスは常に「ボックス」になります。これは、多くのルーチンがバウンディング ボックスで周辺チェック (オーバーラップなど) を実行し、次に実際の形状できめ細かなチェックを実行するためです。きめ細かいチェックは計算コストが高いため、クイック チェック (これらの長方形が重なっているかどうか) は、追加のクロック サイクルに値する候補のフィルターとして機能します。

とはいえ、バウンディング ボックスで行うことはまったく別のことです。

  1. 境界ボックスの座標を使用して何かを画面に描画する必要があるかどうかを判断する場合は、境界ボックスの一部でも表示される場合に描画します。次に、クリッピング ルーチン (任意の形状にクリッピングできます) を使用して、表示したいビットだけが表示されるようにします。

  2. 境界ボックスの座標を使用してクリック リスナーを指定する場合は、そのようにします。六角形リスナー内に追加のコードを実装して、クリックが六角形内にあるか、境界ボックス内にあるかを判断します。ヘクスの外にある場合は、破棄します。

基本的に、何を達成しようとしているのかをもう少し知らなければ、合理的な解決策を提供することはできません。ただし、多くのルーチンでは、最初に呼び出し回数を減らす手っ取り早い手段としてバウンディング ボックスのチェックを行い、次にバウンディング ボックスの解決策が偽陽性 (オブジェクトの衝突を考えてください) であったかどうかを確認するために、より詳細なチェックを行います。

于 2011-03-22T19:37:04.623 に答える