2010-12-22 16 views
4

Ich bin neu in der grafischen Programmierung mit C#. Gestern habe ich ein neues Projekt (WPF) gestartet. Es gibt ein Polyline-Objekt, das ich mit den Koordinaten, die ich berechne, auf dem Bildschirm bewegen muss. Ich weiß nicht, wie ich das Objekt bewegen und so etwas wie eine Animation machen soll. Mit der Maus nach unten möchte ich diese Methode starten Move() danach in den While-Zyklus gehen und wenn die Bedingung abgeschlossen ist (end == true) Ich möchte den Zyklus zu beenden und die Animation abzuschließen. Und während ich im Zyklus bin, ist meine Idee, meine Polyline mit langsamen Bewegungen zu bewegen. Ich habe versucht, Move() in einen Thread zu setzen und Thread.Sleep(...); zu verwenden, aber ich konnte gerade die Endposition nicht ganz von der Polylinie sehen. Ich habe versucht, es in new Thread(new ThreadStart(Move)); ... und this.Dispatcher.BeginInvoke zu setzen, der Effekt war der gleiche. Können Sie mir bitte sagen, wie ich diese Bewegung machen kann?C# eine Polylinie verschieben

 public void Move() 
    { 
     bool end = false; 
     while (!end) 
     { 
      double x = lastPosX; 
      double y = lastPosY; 

      double a = y1 - y; 
      double b = x - x1; 
      double c = -x * y1 + x1 * y; 

      double u, v; 
      GetC(out u, out v);      

      if (y1 < lastPosY) 
      { 
       GetCoordinates(ref u, ref v); 
      } 

      if (u > width || v > height) 
      { 
       gameEnd = true; 
      } 

      lastPosX = u; 
      lastPosY = v; 

      p.Points.Remove(p.Points.First()); 
      p.Points.Add(new Point(u, v)); 

      } 

     } 
+1

Ihr Code ist verwirrend. Wie setzt man "end" auf "true", um die Schleife zu verlassen? Außerdem verwenden Sie viele Variablen, die wir nicht kennen. – user1234567

Antwort

1

Ich war nicht ganz in der Lage, wie funktioniert Ihre Move-Methode, um herauszufinden, aber hier ist ein Beispiel, wie Sie eine Polylinie von links nach rechts auf MouseDown- bewegen können. Hoffentlich werden Sie in der Lage sein, es an Ihre Bedürfnisse anzupassen

XAML

<Canvas Name="myCanvas"> 
    <Polyline Name="myPolyline" 
       MouseDown="Polyline_MouseDown" 
       Canvas.Left="75" 
       Canvas.Top="50" 
       Points="25,25 0,50 25,75 50,50 25,25 25,0" 
       Stroke="Blue" 
       StrokeThickness="10"/> 
</Canvas> 

-Code hinter

private void Polyline_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    double left = Canvas.GetLeft(myPolyline); 
    var animationThread = new Thread(new ThreadStart(() => 
    { 
     while (left < 300) 
     { 
      left += 10; 
      // SetLeft is done in the UI thread 
      Dispatcher.Invoke(new Action(() => 
      { 
       Canvas.SetLeft(myPolyline, left); 
      })); 
      Thread.Sleep(50); 
     } 
    })); 
    animationThread.Start(); 
} 
Verwandte Themen