#performance #pygame #blit
#Производительность #pygame #блиц
Вопрос:
Мне интересно — эффективнее ли сохранять «оконную» поверхность pygame в качестве переменной и вызывать blit для переменной для каждого изображения или вызывать get_surface().blit(…) каждый раз?
Особенно, когда дело доходит до игр, есть много-много png / спрайтов / чего-то, что нужно отображать. Мне было интересно, есть ли у кого-нибудь опыт работы с производительностью вызова функции вместо сохранения вашего «экрана» в переменной?
Пример с переменной:
screen = pygame.display.get_surface()
while True:
screen.blit(my_image.png)
Пример второй:
while True:
pygame.display.get_surface().blit(my_image.png)
С наилучшими пожеланиями,
Cribber
Комментарии:
1. протестируйте оба и покажите свой результат. Как по мне, первая версия должна быть быстрее, но вы не увидите разницы в игре. Первая версия также более удобочитаема.
Ответ №1:
Я последовал совету и сам провел тест производительности, и с точки зрения производительности это действительно не имеет значения, по-видимому.
Итак, решающим фактором является удобочитаемость, я выберу переменную опцию с screen.blit().
start_time = time.time()
while i <= 1000:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
#pygame.display.get_surface().blit(png, (x, y))
screen.blit(png, (x, y))
pygame.display.flip()
i = 1
elapsed_time = time.time() - start_time
1) display.get_surface().blit()
Сумма = 14.827981948852539
x100 - Elapsed time: 0.31400012969970703
x1000 - Elapsed time: 2.9339892864227295
x1000 - Elapsed time: 2.897007465362549
x1000 - Elapsed time: 2.9139883518218994
x1000 - Elapsed time: 2.834001064300537
x1000 - Elapsed time: 2.934995651245117
2) screen.blit()
Сумма = 14.843550443649292
x100 - Elapsed time: 0.2919886112213135
x1000 - Elapsed time: 2.8539986610412598
x1000 - Elapsed time: 2.914994239807129
x1000 - Elapsed time: 2.926569938659668
x1000 - Elapsed time: 2.9420039653778076
x1000 - Elapsed time: 2.9139950275421143