2017-09-04 1 views
1

J'essaie de dessiner un cercle mobile en fonction des coordonnées lues à partir d'un fichier XML. Pour le moment, le cercle ne dessine qu'une seule fois. Quelqu'un pourrait-il me montrer où je vais mal ?!Dessin à partir de l'analyse XML

La méthode EyeMove est appelée dans une boucle qui lit les X et les chaînes Y du XML et parse flotter

public void EyeMove(float x, float y) 
{ 

    point = new PointF(x, y); 
    Invalidate(); 


} 

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    DrawCircle(e.Graphics, point.X, point.Y); 
} 

private void DrawCircle(Graphics g, float x, float y) 
{ 

    using (Brush semiTransBrush = new SolidBrush(Color.Coral)) 
    { 
     using (Pen pen = new Pen(Color.Aquamarine, 2)) 
     { 
      g.DrawEllipse(pen, x, y, 50, 50); 
      g.FillEllipse(semiTransBrush, x, y, 50, 50); 

     } 
    } 
} 
+1

La boucle a-t-elle été exécutée plus d'une fois? Est-ce que les coordonnées x/y sont lues correctement par la boucle? – Equalsk

+0

la boucle s'exécute plus d'une fois et les coordonnées sont lues correctement. Il ne semble pas que les informations PointF soient envoyées au formulaire pour peindre, mais je ne sais pas pourquoi – user8370201

+0

Peut-être que l'exécution est trop rapide. Donc ce que vous avez vu est le dernier cercle dessiné. Essayez d'ajouter un délai (~ 50ms) à chaque itération de la boucle si c'est le cas. – kennyzx

Répondre

1

La boucle est en cours d'exécution trop vite, les cercles sont dessinés et effacés trop vite pour l'homme les yeux pour percevoir, alors ce que vous avez vu est le dernier cercle dessiné. Essayez d'ajouter un délai (~ 50ms) à chaque itération de la boucle pour la ralentir.

La valeur du retard est choisie pour obtenir un FPS approprié pour l'animation. This page fournit des informations sur la fréquence d'images et la vision humaine. Que s'est-il passé lorsque vous l'avez débogué?