Мне нужно использовать Каир, чтобы геометрические формулы перемещались по экрану.Перемещение объектов в Каир
Как можно «перемещать» объекты (например, круги) в Каире? Я попробовал функцию cairo_translate(cr, x, y)
, но, похоже, изменил ссылку на все объекты, и я не знаю, как создать «движение». В других рамках я бы увеличил значение x
и изменил скорость с помощью соответствующей функции clock()
для управления FPS, затем я бы рисовал фон области рисования и рисовал объект с новыми координатами.
Но я не знаю, как это сделать с Каиром, и вся документация, которую я могу найти, не упоминает, как это делается.
Это код, у меня есть:
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);
}
И мои круги по-прежнему. Я бы хотел, чтобы все они перемещались случайным образом. Я просто не знаю, как заставить их «двигаться».
cairo - это не анимационная структура; чтобы «оживить» вещи, которые вам нужно поставить в очередь на перерисовку области рисования с заданными временными интервалами и нарисовать все в прямоугольнике, которое снова изменилось. Также элементы, которые вы рисуете на каире, не являются «объектами» как таковыми; как только вы что-то совершите (с 'cairo_stroke()' и друзьями), он находится на холсте и больше не может быть изменен. – andlabs
«В других рамках я увеличил бы значение x и изменил бы скорость с помощью соответствующей функции clock() для управления FPS, затем я бы рисовал фон области рисования и рисовал объект с новыми координатами». - Хорошо, что произойдет, если вы сделаете это с Каиром? – immibis
@immibis, я не знаю, как это сделать в Каире. Я не вижу никакой документации для управления часами программ или для размещения инкрементных функций в цикле и т. Д. Я просто не нахожу ничего связанного с этой темой. – tvaz