私はあなたが説明したものに似た、役に立つかもしれない何かをいじくり回していました。すべてのタイルを含む単一のマップクラスを使用することにしました。一度に一部だけをメモリにロードしたかったので、セクター(32x32タイル)に分割しました。一度にロードできるのは3x3セクターのみに制限しました。マップが端までスクロールすると、反対側のセクターがアンロードされ、新しいセクターがロードされます。
私のMapクラスには、ロードされたすべてのセクターのRectがあり、私のカメラには、それが配置された場所のRectがあります。ティックごとに、これら2つのレクを使用して、マップのどの部分をブリットする必要があるか、および新しいセクターをロードする必要があるかどうかを確認します。ロードされるセクターを変更し始めたら、シフトする必要があります
各セクターには次の属性があります。1。その座標。(0,0)は世界で最も左上にあるセクターです。2.その相対セクター座標。(0,0)は左上の最も負荷の高いセクターであり、(2,2)3x3がロードされている場合は右下のセクターです。3.セクターの領域を保持するRect4.セクターを示すブール値が完全にロードされました
各ゲームティックは、ブール値が完全にロードされているかどうかを確認し、ロードされていない場合は、Xタイルをマップサーフェスにブリットするジェネレーターを次に呼び出します。私
- 表面全体
- 各更新は、既存のセクターをアンロード、ロード、または更新します
- 既存のセクターが更新されると、シフトします
更新時にセクターをアンロードしてから、必要な新しいセクターを作成します。作成された後、各セクターは、更新ごとにX個のタイルをブリットするジェネレーターを起動します