Obecnie pracuję nad grą i chcę mieć główne menu z obrazem tła.Czy Graphics.DrawImage jest zbyt wolny dla większych obrazów?
Jednak metoda jest bardzo powolna. Dokonałem pomiaru. Załóżmy, że MenuBackground jest moim obrazem zasobów o rozdzielczości 800 x 1200 pikseli. Narysuję go na innej bitmapie 800 x 1200 (najpierw renderuję wszystko do mapy bitowej bufora, potem skaluję ją i wreszcie rysuję na ekranie - tak radzę sobie z możliwością rozwiązywania wielu graczy, ale to nie powinno mieć wpływu w jakikolwiek sposób, patrz następny paragraf).
Więc mam zmierzyć następujący kod:
Stopwatch SW = new Stopwatch();
SW.Start();
// First let's render background image into original-sized bitmap:
OriginalRenderGraphics.DrawImage(Properties.Resources.MenuBackground,
new Rectangle(0, 0, Globals.OriginalScreenWidth, Globals.OriginalScreenHeight));
SW.Stop();
System.Windows.Forms.MessageBox.Show(SW.ElapsedMilliseconds + " milliseconds");
Rezultatem jest cicha zaskakujące dla mnie - ten Stopwatch
mierzy coś pomiędzy 40 - 50 milliseconds
. A ponieważ obraz tła nie jest jedyną rzeczą, którą należy narysować, całe menu zajmuje około 100 ms, aby wyświetlić, co implikuje obserwowalne opóźnienie.
Próbowałem narysować go na obiekt graficzny podany przez zdarzenie Paint, ale wynik był 30 - 40 milliseconds
- niewiele zmienić.
Czy oznacza to, że Graphics.DrawImage()
nie nadaje się do rysowania większych obrazów? Jeśli tak, co powinienem zrobić, aby poprawić wydajność mojej gry?
Jeśli przez "bezużyteczny" rozumiesz "powolny jak ślimak w melasie", to tak. Jak powiedzieli inni, wypróbuj XNA. Trzymaj się 2D renderowania duszków, aż przyzwyczaisz się do struktury XNA, a następnie przejdź do 3D, jeśli jesteś tak pochłonięty. – CodeHxr
Podtrzymuję to tylko dla analogii. :) – Ani