1

私は2D無限横スクロールゲームを開発しています。プレーヤーが右に移動するにつれて、シームレスで「無限」になるように、タイルのランダムなセグメントをワールドに追加し続けます。以下に示すように、ビューポートの右側が青い領域に達すると、ランダムセグメントが追加されます。

図

私のやり方は現在うまく機能しています。問題は、それを行うためのはるかに効率的な方法があるように感じることです。

ワールドのタイルは2D配列で表され、ワー​​ルドに追加する関数は次のようになります。

Array.Resize<Tile[]>(ref world.Tiles, newWidth);

for (int x = 0; x < newSegment.Width; x++) 
{
    world.Tiles[oldWidth + x] = newSegment.Tiles[x];
}

これはオブジェクトの動的コレクションに理想的であることを理解していますが、数千の列List<T>が存在する可能性があることに注意してください。これを正しく想定している場合、特にネストされた多くのリストアイテムは、多くのオーバーヘッドをもたらします。そのため、最初はアレイを使用しました。

私の現在のアプローチは非効率的ですか?もしそうなら、ランダムなセグメントを世界に追加することを頻繁に(平均して10〜15秒ごとに)どのように管理する必要がありますか?

4

1 に答える 1

2

LinkedList<T> はどうですか?あなたの場合LinkedList<Tile>

または、さらに良いのは、キュー<T>ですか?タイルをエンキューして一方向に移動するだけの場合は、キューがオーバーヘッドに最適な場合があります(前のタイルに移動する必要はありません)。

コレクション、LinkedList、またはQueueのいずれかを使用すると、自分自身ではなく、配列のサイズを変更する必要はありません。メモリ管理は、内部で効率的な方法で行われます。

于 2013-02-17T06:22:06.807 に答える