2010-12-22 4 views
4

Je suis nouveau dans la programmation graphique avec C#. Hier j'ai commencé un nouveau projet (WPF). Il y a un objet Polyline que je dois déplacer le long de l'écran avec les coordonnées que je calcule. Je ne sais pas comment déplacer l'objet et faire quelque chose comme une animation. Sur la souris, je veux commencer cette méthode Move() après cela aller dans le cycle de temps et lorsque la condition est terminée (end == true) Je veux terminer le cycle et terminer l'animation. Et pendant que je suis dans le cycle, mon idée est de déplacer ma polyligne avec des mouvements lents. J'ai essayé de mettre Move() dans un fil et utiliser Thread.Sleep(...); mais je pourrais voir juste la position finale pas tout le chemin de la polyligne. J'ai essayé de le mettre dans new Thread(new ThreadStart(Move)); ... et this.Dispatcher.BeginInvoke, l'effet était le même. Pourriez-vous me dire, s'il vous plaît, comment je peux faire ce mouvement?C# déplacer une polyligne

 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

Votre code est source de confusion. Comment définissez-vous "end" sur true pour sortir de la boucle? De plus, vous utilisez beaucoup de variables que nous ne connaissons pas. – user1234567

Répondre

1

Je n'étais pas en mesure de comprendre comment fonctionne votre mouvement de méthode, mais voici un exemple de la façon dont vous pouvez déplacer un Polyline de gauche à droite sur MouseDown. Nous espérons que vous serez en mesure de l'adapter à vos besoins

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 derrière

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(); 
}