Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Ellipsen auf dem Bildschirm bewegen lassen
Tyrael
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Ellipsen auf dem Bildschirm bewegen lassen

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.111

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Tyrael
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

@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?
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.111

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers