Laden...

Ellipsen auf dem Bildschirm bewegen lassen

Erstellt von Tyrael vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.436 Views
T
Tyrael Themenstarter:in
5 Beiträge seit 2019
vor 5 Jahren
Ellipsen auf dem Bildschirm bewegen lassen

Hallo zusammen,

ich lasse ein paar Ellipsen über den Bildschirm wandern.
Der Code sieht so aus:

 
// Bewegung überschreiben
        public override void bewege()
        {
            if (X < 20)
            {
                X = 590;
            }
            else if (X > 590)
            {
                X = 20;
            }

            if (Y < 20)
            {
                Y = 390;
            }
            else if (Y > 390)
            {
                Y = 20;
            }
            X += rnd.Next(-2, 2);
            Y += rnd.Next(-2, 2);

            
        }

Die Ellipsen wabern jetzt alle mal nach links mal nach rechts. Das finde ich nicht sonderlich sinnvoll. Die Punkte sollen schon irgendwo "Eigenständig" laufen und ihren Weg finden.

Habt ihr Ratschläge, wie ich das lösen/angehen kann?

Danke Euch!

5.658 Beiträge seit 2006
vor 5 Jahren

Dafür gibt es in WPF Animationen. Du kannst Animationen in einem Storyboard definieren und einfach die zu animierenden Properties binden. Hier ein Beispiel:

<Storyboard>
    <DoubleAnimation
        Storyboard.TargetName="MyEllipse" 
        Storyboard.TargetProperty="Canvas.Top"
        From="0.0" 
        To="1.0" 
        Duration="0:0:5" 
        AutoReverse="True" 
        RepeatBehavior="Forever" />
</Storyboard>

Die Ellipse befindet sich auf einer Canvas, und du kannst die Position mit den angehängten Eigenschaften Canvas.Top und Canvas.Left festlegen. Wenn du die Ellipse bewegen willst, dann animierst du diese Eigenschaften.

Hier gibt es noch ein paar ähnliche Fragen:

WPF: Shape Position angeben
Modern UI for WPF - Punkte auf Kreis animieren
Darstellung von Objekten im Canvas mit MVVM

Weeks of programming can save you hours of planning

C
2.121 Beiträge seit 2010
vor 5 Jahren

Momentan hast du programmiert dass deine Objekte bei jedem Schritt zufällig um 2 Pixel hin oder her zittern. Der Durchschnitt davon ist Null, da bewegt sich also kaum was.
Eine gleichmäßigere Bewegung erreichst du wenn du dich einmalig für eine Richtung entscheidest und dann ein Stück weit in diese Richtung weiter gehst.

T
Tyrael Themenstarter:in
5 Beiträge seit 2019
vor 5 Jahren

@chilic: genau das möchte ich auch machen.
Die Frage ist, wie ist das umzusetzen?

Ich habe 40 Objekte (alles Ellipsen). Die werden per Zufallsgenerator auf die Canvas verteilt. Der Dispatchtimer ruft bei jedem Tick diese Methode auf, die alle Objekte haben.

Wie kann ich daher festlegen, dass die Objekte sich zunächst für eine Richtung entscheiden, da etwas entlang wabern und dann wieder die Richtung wechseln?

C
2.121 Beiträge seit 2010
vor 5 Jahren

Indem du dir alle x Schritte eine Richtung aussuchst, mit vorgegebenen x und y Differenzen, und in den nächsten Schritten die Bewegung um diese Differenzen ausführst. Dazu musst du dir die Differenzen pro Objekt merken.
Nach wieder x Schritten änderst du die Richtung und behältst sie wieder eine gewisse Zeit bei.
Die Anzahl der Schritte kannst du natürlich auch wieder zufällig wählen.

5.658 Beiträge seit 2006
vor 5 Jahren

Das hat aber auch erstmal nichts mit der Animation an sich zu tun, sondern wäre Teil deiner Business Logic (bzw. Spiele-Logik).

Du solltest die Berechnungen (also unter welchen Bedingungen welche Bewegungen ausgeführt werden) unabhängig von der Benutzeroberfläche implementieren. Am besten in einem eigenen Projekt. Deine eigentlich Anwendung benutzt dann nur diese Logik für die Darstellung. So kannst du alles unabhängig voneinander entwickeln und testen.

Siehe dazu auch: [Artikel] Drei-Schichten-Architektur

Weeks of programming can save you hours of planning