私は2次元、タイルベースの(直交タイル)iPhoneゲームをコーディングしています。すべてのレベルは、アプリの最初の再生時に手続き的に生成され、ユーザーが新しいマップを必要とするまで維持されます。地図はかなり大きく、幅と高さが1000タイルで、地形は破壊的です。現時点ではTerrariaと似ていますが、それは変更されます。大きなランタイム生成タイルマップを効率的に処理するには?
マップ/タイル情報を保持するために、私は現在いくつかの2次元Cスタイルの配列を使用しています。これはうまくいきますが、配列のすべてがshort array[1000][1000]
と定義されているため、これが費やすメモリの量が懸念されます。これはスペースの1000 * 1000 *(短い)バイトを占有します。
特に、ユーザーがマルチタスキングをしているときに、iPhoneには非常に大量のメモリが搭載されていないときは、これはあまり望ましくありません。主な問題は、すべてのレベルが手続き的に生成されるため、.tmxなどの特定のタイルマップ形式を使用できる方法がないことです。タイルがindex(x、y)で破棄された場合、そのインデックスのデータを変更する必要があるため、パフォーマンスも問題になる可能性があります。タイルマップデータをテキストファイルに書き込むことも考えましたが、データにアクセスしたり変更したりするときに問題やパフォーマンスの問題が発生すると思います。
タイルデータを効率的かつ迅速に処理するにはどうすればよいでしょうか?
手続き型で生成されたものであれば、必要なときにタイル値を生成するのはなぜですか? –
それは良い点です。主にプロセスのためです。私のマップはタイルのいくつかを配置する[drunkard walk](http://pcg.wikidot.com/pcg-algorithm:drunkard-walk)メソッドを使用しています。私は、プロセスの性質上、一度にすべてを除いて、これをどうやってやるのか分かりません。 –