2DタイルベースのRTSで橋の下を通過するボート


10

2DタイルベースのRTSを書いています。そして私はそれに「疑似3D」機能を追加したいと思います-川に架かる橋。

私はまだコーディングを開始していません。衝突検出モデルにどのように適合するかを考えようとしています。橋の下を通過するボートと橋の上を移動するユニットは、最終的にマップ上の同じセルを占有します。それらを衝突から予防する方法は?

そのような問題を解決するための一般的なアプローチはありますか?または、これを行うには3Dワールドを実装する必要がありますか?


タイルベースのシステムを使用している場合は、毎回「isOccupied」メソッドなどを追加できます。自分自身の下と上でブリッジをチェックしてください。
Benjamin Danger Johnson、

2
地上ユニットが水ユニットと相互作用しない場合は、両方のユニットセットの分離衝突を処理する可能性があります。そして、おそらく、ハーバーにあるボートは地上ユニットであり、プレイヤー/ npcがボートに入るようなインタラクションを可能にします。
GameAlchemist 2012年

回答:


7

基本的には3番目の次元を作成する必要がありますが、最も単純なケースでは、「地上/橋上」と「水上/橋下」の2つの値のみで構成できます。

Advanced Strategic Commandが行う方法からインスピレーションを得ることができます:ユニットは特定の高さレベルを占有し、他の方法で実行できる特定の機能(航空機の滑走路など)がない限り、そのタイプに合った高さレベルでのみ移動できます。それらを変更すると、通常、移動ポイントがかかり、高さレベルなどにペナルティが課されます。タイルは、それぞれが異なる高さレベルにある限り、任意の数のユニットで占有できます。

ASCの場合、レベルは次のとおりです。

  • スペース
  • 高地(爆撃)
  • 中高度(インターセプター)
  • 地上攻撃高度
  • 地上(ほとんどの地上ユニットとホバークラフト、水上でも)
  • 部分的に水没(潜水艦)
  • 潜水艦(「潜水艦」)

9

レベルを指定する単純な属性を各タイルに追加できます。

だから例えば:

tileA.layer = 0 // Will be at the bottom
tileB.layer = 1 // Will be above level 0, on top of it. 

// Add tiles to layered list
List<List<Tile>> tiles = new List<List<Tile>>();
tiles[0].add(tileA);
tiles[1].add(tileB);

// Draw 'em in the right order!
void Draw(List<List<Tile>> tiles) {
    foreach( var listOfTiles in tiles ) {
        foreach( var tile in listOfTiles ) {
            tile.draw();
        }
}

これで、レイヤーの値に応じてタイルを並べ替え、下から上に描画できます->上!これにより、ゲームにある程度の深みがあるように見えます。ほとんどのタイルエンジンがこれをサポートしています。追加できるもう1つの優れた点は、テクスチャに透明度を設定して、下のレイヤーが透けて見えるようにすることです。

これは、たとえば水で行うことができます-レベル1の水を想像してから、レベル0の海底を想像してください。水のテクスチャがやや透明であれば、海底を上から見ることができます。


@aleguna心配しないで!手伝うのは楽しいだけです。:)
ゾロモン2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.