2016-01-15 2 views
1

Я использую pygame для проведения эксперимента по познавательной науке.Стандартное время рисования пигама

Я рисую объекты на экране - число которых может сильно различаться: 4 - 24. Я рисую их все сразу, когда все вычислено. Проблема состоит в том, что, очевидно, 24 элемента занимают намного больше времени, чем вычислять, чем 4. Это приводит к изменению времени между тем, когда выдается команда для запуска вычисляемых объектов и их фактического отображения на экране. Это всего лишь несколько миллисекунд, но это экспериментальный шум, которого я бы хотел избежать.

Все объекты must могут быть отображены одновременно.

Ниже приведена функция, которую я написал для этого. Все аргументы передаются программой, извлекающей информацию из кадра данных pandas, вычисленного до начала эксперимента. Возможно, вычисление того, как рисовать элементы из этого DF раньше времени, поможет, если это вообще возможно.

def dot_draw(x_positions, y_positions, RGBs): 
    for dot in range(0, len(x_positions)): 
     pygame.draw.circle(screen, RGBs[dot], [ x_positions[dot], y_positions[dot] ], 10) 
    pygame.display.update() 

ответ

1

Все объекты должны быть отображены одновременно.

Когда вы рисуете что-то на поверхности экрана, она не отображается, пока вы не вызовете pygame.display.udpate() или pygame.display.flip().
Итак, если вы хотите, чтобы одновременно отображались несколько изменений, просто позвоните pygame.display.update()после вы закончите рисовать все ваши круги и т. Д. На поверхности экрана.


В ответ на ваш комментарий:

Если вы знаете, что делать заранее, вы можете создать несколько поверхностей размера экрана, а затем обратить в том, что поверхности вместо того, чтобы непосредственно к поверхности экрана, а затем разложить их на поверхность экрана.

+0

Спасибо, но я знаю об этом. Надеюсь, моя функция отражает это понимание. 'pygame.display.update()' вызывается только тогда, когда цикл 'for' завершен. Проблема в том, что цикл for может быть передан от 4 до 24 элементов для рисования, поэтому время для его завершения может варьироваться. Мое предпочтение было бы выполнять все такие вычисления загодя, а не на ходу, поскольку эксперимент продолжается. – lnNoam

+0

Если вы знаете, что рисовать заранее, вы можете создать несколько поверхностей с размером экрана, а затем нарисовать их на поверхности, а не непосредственно на поверхность экрана, а затем выложить их на поверхность экрана. – sloth

+0

Моим решением этой проблемы было создание изображений в памяти с помощью matplotlib и просто отображение их с pygame ... Мне не приходило в голову, что мне не нужно оставлять pygame для выполнения этой задачи (т. Е. Использовать несколько поверхностей). Итак, это должно сработать. Спасибо! – lnNoam

Смежные вопросы