3

オペレーティング システムのクラスでは、「ジュラシック パーク」というタイトルのスケジューリング シミュレーターを作成します。

私の究極の目標は、一連の車が設定された経路をたどり、乗客がそれらの車が戻るために設定された場所で列に並んで待っていることです。これは、トラックとその上を移動する車の単純な 2D のトップダウン ビューになります。

何も視覚的に表示する必要なく、これを簡単にコーディングできますが、固定されたトラックに沿って移動する車を実装する最善の方法が何であるかはよくわかりません。

まず、OpenGL を使用して車を四角形として描画しますが、車の位置を更新し、シミュレートされたテーマ パークの設定されたパスに沿って移動していることを確認する方法については、まだ少し混乱しています。

トラックの頂点をリストに保存し、各呼び出しupdate()で車を次の頂点に近づける必要がありますか?

4

4 に答える 4

2

曲線トラックが必要な場合は、スプラインを使用できます。スプラインは、2 つのベクトル エンドポイントによって指定される数学的に定義された曲線です。エンドポイントを下に垂らし、それらの間の素敵な曲線を解きます。検索により、ソース コードまたはソース コードに派生できる数学が明らかになるはずです。これの良いところは、パーセンテージ計算を行うことで、車両の進行方向を正確に解決できるだけでなく、経路上の次の場所を取得できることです。難しいのは、エンドポイントの各セット間で同じ数のステップが必要ない場合は、曲線の長さの計算を行う必要があることです。

別の方法として、非表示のビットマップを使用し、パスを 1 ピクセル幅の曲線として描画する方法があります。現在の場所の周囲のピクセルを移動方向ベクトルに一致させ、各ステップでデルタ関数を使用してベクトルを更新することにより、パス内の次の場所を見つけることができます。このアプローチは、ジョイスティックを使用して「車両」がさまざまなパスに沿って「駆動」されるパス移動プロトタイプに使用され、ベクトル計算を混乱させる交差点が発生するまで問題なく機能します。しかし、それが一方向の閉じたループである場合、これは問題なく機能し、実装は非常に簡単です。最後のいくつかのデルタを平均化することで、車両の進行方向の角度を滑らかにすることができます。また、各ピクセルが 1 つの「ステップ」になるため、速度制御が簡単になります。

前者の場合、開始/停止場所または関心のあるポイント用に特別にタグ付けされたエンドポイントを持つことができます。後者では、特別なノードのパスで別の色のピクセルを使用するだけです。いずれの場合も、表示されるのはおそらく基本的なパス データではなく、「公園」をきれいに表現したものです。

最も簡単なものを選んで、車が動いているときはいつでも次のパスの場所に進み、車の方向を更新する tick() 関数を記述します。本当に頭が良ければ、半径ベースの衝突処理を実行して、トラックの前の車が停止したときに車が自動的に停止するようにすることができます。

于 2009-04-16T23:48:17.040 に答える
0

私はそれを簡単に保ちます:

タイマーを (100 ミリ秒ごとに) 実行し、各タイマーで新しい場所にある各車を描画します。場所は、車 (各車?) の 2D 座標を含むファイルから読み取られます。

道路を非常に長く (たとえば 30 秒) 設計する場合、30*10 ポイントを書くのは... 難しいでしょう。では、1 秒ごとにその場所をファイルに保存するのはどうでしょうか。次に、これらの 2 つの間隔の間に 9 つの死角ができます。車を一定の速度 (x += dx/9、y+= dy/9) で動かします。

より良いアプローチを聞きたいです:)

于 2009-04-15T20:56:06.513 に答える
0

あなたが説明したように、固定小数点パスまたはスプラインなどのパスを使用できます。次に、このパス上を一定の「速度」で移動します。車がコーナリングと同じようにストレートで移動する場合、これは硬く見えるかもしれません。

したがって、各パスセクションの速度を設定できますが、多くの速度設定ポイントが必要になるか、速度をブレンドする必要があります。そうしないと、速度の変化がぎくしゃくしてしまいます。

または、完全な車のシミュレーションを行い、A* を使用して最適なパスを構築することもできます。それはやり過ぎですが、とてもクールです

于 2009-04-15T20:58:42.997 に答える
0

前進と後退しかなく、前進したいことがわかっている場合は、周囲のセルを見て、道路の色のセルを見つけて移動し、道路の中心にとどまることができます.

急なカーブがないと想定する場合は、道路が目の前にあると想定し、左右にスキャンして、道路が少しカーブしているかどうかを確認し、中央にとどまり、切り詰めます。処理中。

他にも有効なアプローチがありますが、これはシンプルで IMO であり、道路に緩やかなカーブを描くことができます。

もう 1 つのアプローチは、タイルベースにすることです。つまり、目の前のタイルを見て、道路の方向を変えるためにさまざまなタイルを用意し、車を方向転換してタイルにとどまる方法を知っているようにします。

これはスムーズではありませんが、簡単に行うことができます。

于 2009-04-15T20:59:36.753 に答える