Je dois utiliser Cairo pour faire défiler les formules géométriques à l'écran.Faire déplacer des objets au Caire
Comment "déplacer" des objets (comme des cercles) au Caire? J'ai essayé la fonction cairo_translate(cr, x, y)
mais il semble changer le référentiel pour tous les objets et je ne sais pas comment produire de "mouvement". Dans d'autres frameworks j'augmenterais la valeur x
et changerais la vitesse avec une fonction clock()
appropriée pour contrôler les FPS, alors je peindrais l'arrière-plan de la zone de dessin et dessinerais l'objet avec de nouvelles coordonnées.
Mais je ne sais pas comment le faire avec Cairo et toute la documentation que je peux trouver ne mentionne pas comment cela est fait.
C'est le code que j'ai:
genRandVector(numOfBalls);
/* creates big ball */
cairo_set_line_width(cr, 5);
cairo_set_source_rgb(cr, 0, 0, 0);
cairo_arc(cr, balls_MAP[0].x, balls_MAP[0].y, CONF.big_rad, 0, 2 * M_PI);
cairo_stroke_preserve(cr);
cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
cairo_fill(cr);
/* creates other balls */
int i;
cairo_close_path(cr);
cairo_set_source_rgb(cr, 0, 0, 0);
for(i = 1; i < numOfBalls; i++) {
cairo_arc(cr, balls_MAP[i].x, balls_MAP[i].y, CONF.small_rad, 0, 2 * M_PI);
cairo_stroke_preserve(cr);
cairo_fill(cr);
cairo_close_path(cr);
}
Et mes cercles sont encore. Je voudrais les faire tous bouger au hasard. Je ne sais pas comment les faire bouger.
cairo n'est pas une structure d'animation; pour "animer" les choses dont vous avez besoin pour mettre en file d'attente un redessin de votre zone de dessin à des intervalles de temps donnés et dessiner tout dans le rect qui a changé à nouveau. De plus, les éléments que vous dessinez sur le caire ne sont pas des «objets» en soi; Une fois que vous avez commit quelque chose (avec 'cairo_stroke()' et des amis), il est sur la toile et ne peut plus être changé. – andlabs
"Dans d'autres frameworks j'ajouterais la valeur x et changerais la vitesse avec une fonction clock() appropriée pour contrôler les FPS, puis je peindrais l'arrière-plan de la zone de dessin et dessinerais l'objet avec de nouvelles coordonnées." - D'accord, que se passe-t-il si vous faites ça avec Cairo? – immibis
@immibis, je ne sais pas comment faire ça au Caire. Je ne vois pas de documentation pour contrôler l'horloge des programmes, ni où placer les fonctions incrémentales dans la boucle, etc. Je ne trouve rien qui soit lié à ce sujet. – tvaz