Я создаю сетевой аниматор (аналогично nam, если вы использовали его ранее).
По сути, у меня есть узлы, представленные в GTK + DrawingArea как маленькие точки, и я обновляю позиции этих узлов и перерисовываю DrawingArea в цикле.
Полученная анимация быстрая, но не плавная (много мерцания). Возможно, это связано с тем, что перед каждым кадром я закрашиваю область рисования сплошным цветом.
Как вы думаете, я могу лучше всего решить эту проблему? Должен ли я предварительно рендерить кадры на Pixbufs? Есть ли лучшее решение?
Вот мой текущий код рисования (с использованием PyGTK):
rect = self.drawing_area.get_allocation()
style = self.drawing_area.get_style()
pos = [n.position_at(self.t) for n in self.nodes]
self.drawing_area.window.draw_rectangle(style.bg_gc[gtk.STATE_NORMAL], True,
0, 0, rect.width, rect.height)
for p in pos:
self.drawing_area.window.draw_arc(style.fg_gc[gtk.STATE_NORMAL], True,
rect.width * (p.x / 2400.0) - NODE_SIZE/2,
rect.height * (p.y / 2400.0) - NODE_SIZE/2,
NODE_SIZE, NODE_SIZE,
0, 64 * 360)
где self.t
- текущее время, которое увеличивается в цикле.