LINUX.ORG.RU

pygame


0

0

Привет,

вот решил поэксперементировать с pygame и почему то все медленно очень. Что я делаю не так?

Вот тут лежит скрипт, анимирующий тараканов.

http://mielofon.de/files/mlife_exp.tar.gz

Почему то он максимум выдает 30 fps-ов, и очень быстро количество этих fps-ов падает если добавлять движущихся объектов. Судая по всему blit функция жрет больше всего cpu. Судя по профайлингу. Все что мне в голову пришло оптимизировать, я кажется оптимизировал. У меня вроде установленна nvidia карточка на нотебуке и проприетарный драйвер.

Что я делаю не так, как ускорить скрипт?

Спасибо

Что-то я не увидел никаких тараканов и никаких сообщений об ошибках при запуске test.py. Мышью водил, кнопки нажимал. Что я не так делаю?

mipt_student
()

Тараканы есть. На загруженном процессоре Fps низкий - 18 при дефольтном кол-ве тараканов.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Вы каждый раз (!) получаете объект (?) фонта:
def render_draw_text(self, text,x,y,color):
font = pg.font.SysFont("Courier New",27)
font.set_bold(1)
ren = font.render(text,1,color)
self.draw_text( ren, x,y )

def render_text(self, text,color):
font = pg.font.SysFont("Courier New",27)
font.set_bold(1)
ren = font.render(text,1,color)
return ren

Вынесите это в инит.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Да оно все равно один раз в минуту вызывалось и вынос в init не сильно повлиял на скорость.

Мне вообще кажется странным, почему так медленно? Посмотрю исходники игрушек, как там делается.

the_moon
() автор топика
Ответ на: комментарий от the_moon

Может у вас жесткая привязка к максимальному кол-ву кадров. Я питон не знаю и pygame не трогал, но видел игры на питоне - там все летает.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Да нет, не думаю. Была бы привязка, не было бы такого падения FPS-ов. Причем если сдвинуть окно на место, где тараканов нету, то FPS вазрастает.

the_moon
() автор топика
Ответ на: комментарий от the_moon

> Да нет, не думаю. Была бы привязка, не было бы такого падения FPS-ов.

Почему, при привязке проседание fps возможно, повышение fps ограничено привязкой.
Но привязку делают двумя способами: вертикальная синхронизация (не думаю что вы пытаетесь рисовать каждый второй кадр при частоте в 60Гц) и таймер.

> Причем если сдвинуть окно на место, где тараканов нету, то FPS вазрастает.


А просчеты движений и отрисовка прямых линий не могут быть узким местом? Нарисовать софтверно линию с антиальясингом достаточно ресурсоемкая задача. Хотя если используется ускоритель, то тут затыка быть не должно.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

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

the_moon
() автор топика
Ответ на: комментарий от the_moon

> Нашел, все оказалось просто. Надо было конвертировать спрайты после загрузки к формату дисплея иначе при блитинге pygame делала ковертацию каждый раз сама.

Даже в голову не пришло, что pygame (или вы) не сделали этого.
Справедливости ради, стоит заметить, что тот же SDL сам не приводит сурфейс к нужному формату, нужно его (SDL) просить об этом.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.