編集: 3 つすべてのタイル レイヤーが画面全体を埋め尽くす場合でも、150+ fps を取得したため、2 番目のアプローチを選択しました。
編集 2: 頂点バッファー オブジェクトとそれらが静的ジオメトリにどのように最適であるかについて多くのことを読みましたが、2D タイルを VBO に変換して GPU メモリに保存する方法はまだわかりませんが、間違いなくその方法のようです他の誰かが静的ジオメトリ/クワッドをレンダリングする高速な方法を探している場合に行ってください。
私は Super Meat Boy のようなゲームを作成していますが、レベル タイルを配列リストに格納し、カメラ境界オーバーラップ テストを実行してレンダリングする必要があるかどうかを確認する方が良い/速いかどうか疑問に思っていました。
foreach(Tile tile in world.tiles) {
if(Overlap(camera.bounds, tile))
render(tile);
}
それとも、すべてのグリッド スクエアを格納し、カメラの境界間のみを読み取る 2D 配列の方がよいでしょうか?
int left = (int)(camera.position.x - camera.width/2);
int right = (int)(camera.position.x + camera.width/2) + 1;
int top = (int)(camera.position.y - camera.height/2); // WHY XNA DO YOU UPSIDE DOWN!!!
int bottom = (int)(camera.position.y + camera.width/2) + 1;
for(int x = left; x < right; x++) {
for(int y = top; y < bottom; y++) {
render(world.tiles[x][y]);
}
}
カメラは画面上に 64*36 のタイルを収めることができますが、後者のアプローチを使用すると 2300 個の奇数タイルを読み取ることができますが、レベル内のすべてのタイルでオーバーラップ テストを行っていますか? 一致する隣接するタイルをより大きなクワッドに結合し、テクスチャを繰り返すことについての回答を読みました (ただし、テクスチャ アトラスを使用しているため、テクスチャ上の領域を繰り返す方法がわかりません)。
乾杯。