2009-04-21 12 views
1

良い2Dグリッドの動きを実装する方法がわかりません。兵士のようなユニットの動きは簡単ですが、エレガントな方法で車両を回す方法はわかりません。動きはC & Cレッドアラートのようなものでなければなりません(3Dであるため3ではなく、2Dだけが必要です)。RTS車両グリッドの動き

EDIT:コードを尋ねるのではなく、パスファインディングアルゴリズムへのリンクもありません。簡単に見つけることができるためです。しかし、グリッドの動きはありません。 1つのタイルから他のタイルへの「正確な」移動、特に斜めの移動(たとえそれが直交移動よりも「長い」移動であっても)をどのように移動するのかわかりません。

答えて

1

一方向ターン当たりのグリッド単位での車両の旋回半径を発現し、そして増分各々はエリックリッペルトによって

1

この4-part seriesをオンに次の隣接するグリッドユニットにそれらを移動するブレゼンハム円アルゴリズムを使用することであろう役立つはず:

私はあなたがC#を指定していないことを知っていますが、彼が提示する一般的なアルゴリズムは健全です。

+0

実際、私はC#でこれを行いますが、ポイントはパスファインディングアルゴリズムではありません(Web上のどこでも取得できます)。それは動きそのものです。 – mnn

2

注:これを作成していますが、正常に動作するはずです。

ソースと目的地の座標が与えられている場合は、2つの点の間に単に「線を描き」、その線に沿って車両を移動します。

車両がより細かいグラフィックサーフェス上を移動するとき、ユニットが(実際には)単純な座標マッピングを介してどの正方形かを判断できます。

ユニットが1つのスクエアにあることが重要な場合は、ユニットが停止すると次のスクエアに入り込みます(すでに正方形Aのままになっている場合はBそれでも車両が「停止」している)。

2つのポイント間の見出しを計算して車両の方向を決定します。

車両には8つの方向しかない場合は、最終目的地ではなく次の増分方形地点を指すことができます。それは、ゆっくり動く車では大丈夫だが、速い車では面白いと思う。

このline drawing algorithmを参照して、四角を計算してください。マインド、これはパスの発見とは関係ありません。

+0

まあ、ありがとう、最後にいくつかのより良い答え。私はこれを見ていきます。しかし、私は現代の3D RTSゲームのような自由な動きより簡単な何かをあきらめています。 – mnn

+0

質問:私は8方向または16方向のいずれかを選択することができます(またはそれをより複雑/悪化させる)?衝突を検出しやすくなるため、私はこのアプローチ(自由運動の代わりに)を望んでいます。 – mnn

+0

8対16の方向は本当に重要ではありません。単位を表示するときに直面する解像度の問題ですが、依然として "グラフィック"スプライト座標と基礎となるグリッド座標をマップする必要があります。衝突はグリッドレベルにあるべきだと私は思う。 –

関連する問題