none
Animation in Windows Form zu langsam / Wie beschleunigen? RRS feed

  • Frage

  • Hallo Allerseits, 

    ich habe eine einfache Animation geschrieben, die einen Gegenstand (Bitmap, Rechteck ) in einer Windows-Form von einer Seite zur anderen bewegt. Aktualisiert wird die Graphik durch einen Timer. Leider ist der Vorgang hoffnungslos langsam. 

    Frage: Wie kann das schneller passieren? Am der Performance von C# hängt es (hoffentlich) ja nicht...

    Viele Grüße

    Stephan 

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace GeoFigurGUI5
    {
        public partial class FormView : Form
        {
            private int x;
            private int y;
            Bitmap img;
            Graphics gImg, g;
            public FormView()
            {
                InitializeComponent();
                tmrMoving.Interval = 1;
                x = 50;
                y = 50;
                img = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
                gImg = Graphics.FromImage(img);
            }
            private void FormView_Paint(object sender, PaintEventArgs e)
            {
                gImg.Clear(Color.White);
                gImg.FillRectangle(Brushes.Red, x, y, 50,50);
                e.Graphics.DrawImage(img, Point.Empty);
            }
    
            private void tmrMoving_Tick(object sender, EventArgs e)
            {
                x = x + 1;
                if (x > this.ClientSize.Width) x = 0;
                Invalidate();
    
            }
        }
    }
    

    Dienstag, 27. September 2022 11:36

Alle Antworten

  • Hallo Stephan,

    was verstehst Du unter langsam?

    Du zeichnest die gesamte Form jede Miliisekunde (also 1.000 mal pro Sekunde) komplett neu. Dass das jetzt nicht sonderlich performant sein dürfte, ist klar. Aber dennoch die Frage: Was verstehst Du unter langsam?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 27. September 2022 22:29
    Moderator
  • Hallo Stefan,

    danke für die Antwort. Langsam meint, das Bild braucht etwa fünf Sekunden von einer Seite zur anderen (500px). 
    Das ist nicht der Standard für schnelle Bewegungen in "Videospielen"...

    Wenn ich tmrMoving.Interval höher als eins setze, so wird es noch langsamer.

    Eine Idee, wie ich es besser machen kann? Ich kann natürlich den Inkrement erhöhen (z.B. x = x + 10), aber dann ruckelt es natürlich.

    Viele Grüße

    Stephan 

    Donnerstag, 29. September 2022 21:27