6

この古典的なヘリコプター ゲームのようなランダムなトンネルを生成するには、どのような方法を使用できますか? それ以外は、滑らかでナビゲートできるようにする必要がありますが、できるだけ自然に見えるようにする必要があります (対称的すぎず、過度に歪ませないようにする必要があります)。

  1. 最も重要なことは、無限であり、時間の経過とともにその厚さを制御できるようにすることです。必要に応じて、必要に応じて幅を狭くしたり広くしたりします。
  2. 理想的には、上記のゲームのような長方形ではなく、滑らかな曲線で効率的に生成できるはずです。
  3. その境界が何であるかを事前に知ることができるはずなので、衝突を検出してトンネル内でパワーアップを生成できます。
  4. それをより細かく制御したり、最適化の可能性を提供したりするその他のプロパティは大歓迎です。

注: 私はどちらが最善であるか、そのゲームが何を使用しているかを尋ねているのではありません。それは、広範な議論を引き起こし、主観的なものになる可能性があります. それがすべてです、私はそこからそれを取ることができます。

また、 gamedev で尋ねました。それはゲーム開発の質問であるのと同じくらいアルゴリズムの質問でもあるので、両方の場所に当てはまると思います.IMO.

4

2 に答える 2

3

トンネルの壁にベジエ曲線を使用できると思います。ベジエ曲線には、曲線の各端がその端にある最後の 2 つの制御点間の線分に接するという特性があるためです。これは、鋭い角を作成することなく、曲線を遅延して生成し、それらを追加することが可能であることを意味します。オフスクリーン セグメントを 1 つだけバッファする必要があります。その左端が画面に表示されたらすぐに、次のオフスクリーン セグメントを作成します。

3 次ベジエを使用する場合は、4 つの制御点が必要です。1 番目は、必ず前のセグメントの最後の制御点と同じになります。接合部で滑らかさを維持するには、2 番目は、前のセグメントの最後の 2 つの制御点を含む線上のどこかにある必要があります。4 番目は、この曲線を終了させたい場所です。3番目はおそらく自由に選択できます。(カーブが「2 倍になる」可能性を避けるために、1 番目と 4 番目のポイントの間で水平に保つことができます。)

ベジエには、実装を簡素化する 2 つのプロパティがあります。

  • カーブは、コントロール ポイントによって定義された凸包内に完全に含まれているため、上部のカーブと下部のカーブの間にギャップがあることを確認するのは簡単です。
  • ベジエをいつでも分割して、2 つのサブベジエを生成できます。これは、ラスタライズ/リニアライズに便利です。

編集:「境界ボックス」を「凸包」に置き換えました。

于 2012-09-28T20:52:24.530 に答える
2

トンネルの幅を決定し (距離が長くなるにつれて狭くなる可能性があります)、ランダムな高さに 2 つのコントロール ポイントを配置します。ただし、前のペアまたはポイントからの垂直方向のオフセットが、ヘリコプターが操縦できるように十分小さいことを確認してください。 . 等距離にコントロール ポイントを追加し続けます。

     _  
_         _    _

     _         _
_         _    

次に、中間点を見つける必要があります。モノトーン キュービック補間を使用します。これにより、すべての中間点が常にコントロール ポイントの間にあり、上下することはありません。JavaScript で作成したデモを次に示します: http://explored.tk/experiments/monotone/

UPD: または、そのような曲線を 1 つ生成し、その周りに対称的にトンネル境界を描画することもできます。

于 2012-09-28T21:20:58.217 に答える