Пигментная прокрутка фона - PullRequest
2 голосов
/ 06 февраля 2012

В Pygame я хотел бы иметь фон прокрутки, чтобы игрок мог перемещаться по большой площади, я сделал это довольно легко, но игра работает очень медленно.

часть моего кода: http://pastebin.com/1EzDV7mc

что я делаю неэффективно?как я могу заставить его работать быстрее?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

См. Руководство для новичков в PyGame

В частности:

  1. Использование surface.convert ()

  2. В идеале используйте грязную прямоугольную анимацию, обновляя только измененные части экрана, а не весь вид.Тем не менее, я ранее использовал обновления всего экрана в PyGame (это то, что вам нужно сделать для игры, где весь экран постоянно прокручивается), и это не так уж плохо на современном компьютере, если у вас не слишком многообъекты.

Не упомянуто в этом руководстве:

  1. Вы стремитесь к 60 кадрам в секунду с clock.tick (60), цель ниже, 30 кадров в секундунормально и не будет сильно затягивать процессор

  2. Если вам нужно выполнить полноэкранные обновления для прокрутки, то либо а) не используйте много объектов, либо б) прекратите использовать PyGame ипереключиться на OpenGL

  3. почему вы бьете изображения, используя их средние точки, а не их верхнюю левую точку?Ошибка?

  4. Обычно атрибуты размера хранятся как отдельные атрибуты ширины и высоты, а не как список, который вы должны индексировать.Это делает ваш код намного понятнее.

0 голосов
/ 05 января 2016

В дополнение к тому, что сказал дзюнъитиро, я обнаружил, что на сайте есть информация, которую он сказал, плюс немного.

https://www.pygame.org/docs/tut/newbieguide.html

Я не называю вас новичком, даже я многому научился на этом сайте, и я использую Pygame в течение 6 лет.

Кроме того, surface.convert () работает только с непрозрачными изображениями. Используйте surface.convert_alpha (), который работает со всем. Я обычно создаю функцию, поэтому мне не нужно набирать всю вещь каждый раз, когда я хочу загрузить изображение. Не стесняйтесь использовать следующие 2 строки кода:

def loadify(imgname):
    return pygame.image.load(imgname).convert_alpha()

Это увеличило частоту кадров в моей игре с 18 до 30 кадров в секунду.

Удачи!

...