Diese Methode, scheint meine Fliesen zieht ganz langsam zu sein, ich bin nicht sicher, genau falsch, was ist, ist es meine Culling Methode ist nicht belive arbeiten und so zieht Offscreen, aber im nicht ganz herunter sicher. Hier ist sie:XNA - Culling Leistungsproblem
// Calculate the visible range of tiles.
int left = (int)Math.Floor(cameraPosition.X/16);
int right = left + spriteBatch.GraphicsDevice.Viewport.Width/16;
right = Math.Min(right, Width) + 1; // Width -1 originally - didn't look good as tiles drawn on screen
if (right > tiles.GetUpperBound(0))
right = tiles.GetUpperBound(0) + 1; // adding 1 to get the last right tile drawn
int top = (int)Math.Floor(cameraPosition.Y/16);
int bottom = left + spriteBatch.GraphicsDevice.Viewport.Height/ 16;
bottom = Math.Min(bottom, Height) + 1; // Height -1 originally - didn't look good as tiles drawn on screen
if (bottom > tiles.GetUpperBound(1))
bottom = tiles.GetUpperBound(1) + 1; // adding 1 to get the last bottom tile drawn
// For each tile position
for (int y = top; y < bottom; ++y)
{
for (int x = left; x < right; ++x)
{
// If there is a visible tile in that position, draw it
if (tiles[x, y].BlockType.Name != "Blank")
{
Texture2D texture = tileContent["DirtBlock_" + getTileSetType(tiles,x,y)];
spriteBatch.Draw(texture, new Vector2(x * 16, y * 16), Color.White);
if (isMinimap)
spriteBatch.Draw(pixel, new Vector2(30+x, 30+y), Color.White);
}
}
}
GetTileSetTypes ist eine Funktion zu erhalten, welche Fliesen sind um ihn herum, für verschiedene Texturen, wie DirtBlock_North, DirtBlock_Center usw.
Tile Inhalt wird nur eine Klasse mit meinem Block Texturen.
Wie haben Sie festgestellt, dass dies der Code ist, der langsam ist? Wie viele Kacheln werden im Allgemeinen pro Bild gezeichnet? Wo nennst du SpriteBatch.Begin und .End? –
Es ist sicher ein SpriteBatch-Problem, wenn ich nur die Zeichnung der Fliesen überspringe, aber Kollision und so lade, erhalte ich 30 fps. Das führt mich zu der Annahme, dass die Culling-Methode an der Spitze immer noch Sachen vom Bildschirm entfernt und das Umschalten der Grafik ein Problem ist. – Cyral
sollten Sie wahrscheinlich einen Profiler verwenden, damit Sie genau feststellen können, was ihn langsam verursacht. Beispiel: SlimTune; http://code.google.com/p/slimtune/ –