tKoD Performance um 500% verbessert!

Es kling unglaublich ist aber wahr! Ich habe die Performance von tKoD mit 10 Zeilen Code Änderung um 500% verbessert!

Ich hatte festgestellt, das ich im Menü 2800 FPS (normal für Menüs) hatte, im Spiel aber nur 75 FPS. Das ist zwar immer noch gut, aber für ein 2D Spiel auf einem guten Rechner nicht berauschend…

Also musste ein Profiler ran(Der von EQAUTEC, kann ich nur empfehlen). Das profilen ergab, dass die auffälligste Methode war die Kameraberechnung. Die sah so aus:

public static Vector2 CameraPosition
        {
            get
            {
                return new Vector2(
                    Math.Min(
                        TilemapHelper.ActiveTilemap.Width * 32 - GOA.Game.GraphicsDevice.Viewport.Width,
                        Math.Max(0, GOA.Hero.ExactPosition.X - GOA.Game.GraphicsDevice.Viewport.Width / 2)),
                    Math.Min(
                        TilemapHelper.ActiveTilemap.Height * 32 - GOA.Game.GraphicsDevice.Viewport.Height,
                        Math.Max(0, GOA.Hero.ExactPosition.Y - GOA.Game.GraphicsDevice.Viewport.Height / 2)));
            }
        }

Wo lag der Fehler? Ganz einfach, Camera Position wird bei jedem Tile und NPC abgefragt. Da .NET scheinbar das ganze nicht cached, wird die Position jedes Mal neu berechnet. Und das über 5.000 Mal pro Frame! Was also tun? Einfach den Wert selber cachen! Nur einmal pro Frame berechnen, und dann nur noch zurückgeben. Und schon hat man 500% mehr Performance!

Also: Benutzt einen Profiler, es lohnt sich!

Ähnliche Beiträge:

About Niklas

Ich bin Niklas Rother, der Autor dieses Blogs. Ich schreibe hier über meine Erfahrungen mit XNA, (speziell bei der Entwicklung meines Spiels, The Kingdom of Darkness), über meine anderen Programme, und was mir sonst noch so technisches einfällt. Momentan erscheint hier ca. 1x pro Woche ein Artikel...
This entry was posted in Programmieren, The Kingdom of Darkness, XNA and tagged . Bookmark the permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>