1

私は純粋なJavaで2Dトップダウンゲームに取り組んでいます。これまで、Minecraftのようにタイル(およびエンティティ)のチャンクで動作するノイズマッピングシステムがあります。

int[s * s]タイルを格納する方法は、配列を作成することです。ここsで、はチャンクの側面のサイズ(タイル単位)です。次に、整数でインデックス付けされた、ゲームで可能な各タイルを含むタイルの静的配列があります。int[s * s]これらは、各チャンクに格納されている整数です。ここで、非表示のスポーンタイル、壁、木、トランジションタイルなどのタイルをオーバーレイできるようにします(草が砂に変わるときのように、砂の上に草の境界があり、新しいタイルになります)。

問題は、チャンクの各座標に格納できる整数は1つだけであるということです。別の方法は、タイルの実際のインスタンスをチャンク内に配置し、オーバーレイするタイルがその真下のタイル(スタックなど)を指すようにすることですが、これは一種の悪いアプローチだと思います。私がテストした別のアプローチは、タイルのリストの配列を作成することでしたが、これも非常に悪いことでした。

これを達成するための良い方法はどれですか?

4

1 に答える 1

1

通常、タイルとオブジェクトのストレージを分離します。

  • int [w*h]タイル自体にまたは同様のものがあり、正方形ごとに1つのタイルしか許可されません。
  • ArrayList [w*h]これとは別に、各正方形にエンティティのリストを格納するを作成することもできます。この配列にはnull空の正方形が含まれるため、大部分の正方形(エンティティが含まれていない)の追加のストレージコストは最小限に抑えられます。

もちろん他のアプローチもありますが、これにはシンプルで非常に効率的であるという利点があります。

唯一の本当の欠点は、タイルとエンティティを処理するために個別のコードを作成する必要があることです。ただし、通常はタイルとエンティティを異なる方法で処理するため、これが大きな問題になる可能性はほとんどありません。

于 2013-03-19T02:53:59.427 に答える