問題:マップクラスのタイルデータを保存しようとしています。私はレイヤーごとにパレットを使用するというアイデアを持っていました。パレットはレイヤー内のデータを記述し、各バイトがタイルタイプを表すバイト配列になります。タイルデータをレイヤー複数レイヤーあたり1億個以上のタイルに保存する
これは、1億のタイル1層が~96mbに等しいことを意味します。しかし、私は実際に1バイトにどれくらいのデータを格納できるのか見落としてしまい、もちろん256タイルしか格納できません。 256 *タイルサイズのテクスチャサイズの平方根になります(この場合、タイルサイズは16です)。 256 * 256のテクスチャサイズは、各パレットが1つのテクスチャしか持つことができないほど小さすぎます。私がレイヤーに持つことができるタイルを厳しく制限しています。
タイルデータを格納するために1バイトの代わりに2バイト(短い)を使用するかのようにバインドされています。メモリ使用量を2倍にして1レイヤあたり〜192MBになります。私は最低でも4つのレイヤーが必要です。最終製品を768MBのラムに膨らませた。私はまた、各バイトの配列オフセットもその位置の記述であるため、データ内のデータを記述することはできません。
私はこのデータをより効率的に保存する方法があります。最悪のシナリオでは、このすべてをディスクに保存し、ディスクからメモリにバッファリングする必要があります。しかし、私はそれを記憶しておくことを好むでしょう。
私は数時間で何かスマートに思いつくことができると思うが、私はこの問題に対処するために何も知られていない一般的な方法があるかどうかを尋ねると思った。
これはあなたの財布で解決できる種類の問題です。より多くのRAMを購入してください。;) – carlpett
私は少し古い学校を考えていると思う1GBのRAMの要件と2Dのゲームは、それは私が悪いとは思いません。まだ私は代わりが大好きです。 – user936509
うまくいっていたとしても、私は一種の冗談でした。同時に1億個のタイルがすべて見えていますか?それ以外の場合は、可視部分をメモリに保持し、必要に応じてその他の部分をロードすることもできます。また、すべてのポジションには常にデータが含まれていますか?それ以外の場合は、疎構造を作成します。 – carlpett