@coi1751

Как оптимизировать прорисовку в pygame( Python)?

Идея такая, имеется изображение длинной 8к пикселей, в будущем камера будет двигаться вместе с персонажем, пока этого не сделал, но столкнулся с проблемой плохой производительности. 60 раз в секунду перерисовывать всю картинку довольно жирно. Как в pygame реализовать прорисовку лишь определенной части экрана, где происходят изменения?
Советчикам: "просто вынеси display.update() за цикл", если так сделать, то мы будем играть в игру лаги виндовс 2007. Фон не будет обновляться, а персонаж будет, в итоге мы нашим персонажем рисуем..
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@rPman
Во первых, в подавляющем большинстве случаев, 99% работы программиста (отрисовки, организации игрового цикла и прочее) берет на себя игровой движок/фреймворк. Но вы молодцы, что пытаетесь, наверное, сделать все сами с нуля.

У вас должен быть игровой цикл отрисовки игрового мира, и правильно организованный мир, который по возможности не должен зависеть вообще от того, успевает ли отрисовка или нет. Цикл отрисовки должен пытаться нарисовать следующий кадр, сделать какие то оптимизации для отрисовки следующего (бывают даже на несколько кадров вперед подготовку делают, сложно, иногда приходится лаги разрешить но увеличивает плавность графики), затем, если затраченное время оказалось меньше, отведенного для одного кадра (чтобы было 30/60fps или сколько хотите), ждет оставшееся время на паузе (отрабатывает игровой цикл для однопоточной реализации), и все повторяется.

Не нагружайте процессор зря. За графику пусть отвечает видеокарта (соответствующие библиотеки и фреймворки), потому что пока вы рисуете друг над другом спрайты, копируя блоки оперативной памяти, видеокарта все это сделает параллельно, эффективно, и главное удобнее. Плюс видеоускоритель есть уже чуть ли не в холодильниках, т.е. в каждом современном процессоре - десктопы, мобильные, игровые приставки...

p.s. не к вам лично, а вообще:
бедный наш мир, лет 10-20 назад, gamedev решали вопросы уровня, как соптимизировать функцию деления чтобы метод прорисовки спрайта успевал отработать до возврата хода луча crt монитора... а сейчас задачи, с которых начинает программист - это какой конструктор/фреймворк выбрать и как его повернуть,/настроить чтобы на экране появились человечки и стали игрой, даже не попытавшись разобраться, как это работает внутри.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы