3

新しいゲームの開発を開始します。達成したいことの1つは、マップデータを保持する動的配列のようなシステムです。ゲームはトップダウン2Dで、XNA 4.0とC#で作成されます。基本的にタイルベースのランダム化された領域から始めます。そのため、2次元配列は、テクスチャのリストに対応する数値を保持することによってこれを実現する1つの方法であり、このランダムに作成されたマップを描画する方法になります。問題は、私はあなたが始めた場所の周りにエリアを作りたいだけで、彼らが望む方向に冒険することができるということです。これは、マップ配列に、進む方向によりランダム化されたデータを入力する必要があることを意味します。

彼らが新しいゲームを開始するときに、ランダムに生成された大きなマップ配列を作成する1回限りのマップ作成プロセスを実行できると思いますが、すべてを常にメモリに保持することも非効率的です。おそらく、そのマップデータの一部だけを一度にメモリに保持し、残りをメモリに保持しない方法があったとしたら。結局、私はマップのチャンクをメモリ内でそれらにいくらか近づける必要があるだけなので、おそらくあなたの何人かはこの種のランダム化されたマップと動的配列の問題に取り組む良い方法についての提案を持っているかもしれません。必要な近くのマップデータを取得し、画面から離れて不要になったときに、どういうわけかそのメモリを削除できるようにした場合は、動的配列タイプである必要はありません。大量のメモリを占有する巨大な配列があります。

4

2 に答える 2

2

私はただの学生で、ゲームプログラミングの経験はありませんが、私が知っていることから、配列を使用している間は配列を拡張することはできません。9つのバッファ(それぞれ2D配列、各NSEWと対角線方向に1つ)のようなものの間でリソースを前後にシフトする必要があると思います。各バッファには、たとえば9つのタイルがあります。

例えば:

プレーヤーはゾーンにロードされ、タイルの3x3配列の中央にあり、すべての方向にタイルが表示されます。バックグラウンドで、周囲のバッファのテクスチャIDを計算し、準備します。

[  CENTER   ]
+---+---+---+
|   |   |   |
+---+---+---+
|   | X |   |
+---+---+---+
|   |   |   |
+---+---+---+

プレイヤーが中央のタイル、たとえば東から移動すると、中央のバッファーの東端に配置されます。

[  CENTER   ]
+---+---+---+
|   |   |   |
+---+---+---+
|   |   | X |
+---+---+---+
|   |   |   |
+---+---+---+

この時点で、タイルが1つ重なるように、中央のバッファーのエッジに沿って東方向に準備されたバッファーを配置します。

        [    EAST   ]
[  CENTER   ]
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+
|   |   | X |   |   |
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+

これにより、プレイヤーはイースタンバッファーに移動できるようになります。そこに到達すると、EasternバッファーがCenterバッファーになり、古いCenterバッファーが新しいWesternバッファーとして再利用されます。古いWesternバッファー(およびそれに垂直に隣接するバッファー)をリサイクルして、新しいNorth-East、East、およびSouth-Eastバッファーにすることもできます。

[  CENTER   ]
+---+---+---+
|   |   |   |
+---+---+---+
|   | X |   |
+---+---+---+
|   |   |   |
+---+---+---+

もちろん、必要なバッファーの数、バッファーあたりのタイルの数、およびパフォーマンスのために適切なリサイクル/前処理時間がいつになるかを実験する必要がありますが、これはうまくいくと思います。

于 2012-10-27T03:19:49.800 に答える
2

問題が実際に存在することを確認する前に、問題を解決しようとしているように思えます。

実際に簡単な方法(すべてをメモリにロードするだけ)で試してみて、メモリを使いすぎていることを確認しましたか?クヌース、「時期尚早の最適化はすべての悪の根源です」。

重要なのは、最初に達成しようとしているユニークなことに焦点を当てることです。それが、このゲームを作成する理由です。そこで忙しくしていることは間違いありません。トップダウン2Dスクローラーにクレイジーなパラダイムシフトの新しい見方がない限り、スマートフォンのような制限された環境であっても、メモリ使用率が制限要因になる可能性はほとんどありません。

ゲームの開発を終了し、メモリ使用率が実際に問題であることがわかった場合は、最適化を開始するのに適切なタイミングです。質問で想定している解決策(一時的なキャッシュとプリフェッチ)に焦点を当てるだけでなく、プログラムが必要のないメモリを使用している他の方法を見つけることを心がけてください。

于 2012-10-27T04:55:49.133 に答える