Вопрос

Я играл с pygame (на Debian/Lenny).Кажется, работает хорошо, за исключением раздражающего разрыва блитов (полноэкранный или оконный режим).

Я использую драйвер SDL X11 по умолчанию.Поиск в Google подсказывает, что это известная проблема с SDL, заключающаяся в том, что X11 не предоставляет возможности вертикальной синхронизации (даже при отображении, созданном с помощью FULLSCREEN|DOUBLEBUF|HWSURFACE флаги), и вместо этого мне следует использовать драйвер «dga».

Тем не менее, бег

SDL_VIDEODRIVER=dga ./mygame.py

вызывает инициализацию pygame с помощью

pygame.error: No available video device

(несмотря на xdpyinfo показывает наличие расширения XFree86-DGA).

Так:в чем секрет получения вертикальных сальто без разрывов?Либо за счет того, что эта штука dga работает, либо какой-то другой механизм?

Это было полезно?

Решение

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

Другие советы

Лучший способ свести разрывы к минимуму — поддерживать частоту кадров как можно ближе к частоте экрана.В библиотеке SDL нет вертикальной синхронизации, если вы не используете через нее OpenGL, поэтому единственный способ — самостоятельно определить частоту кадров.Аппаратный двойной буфер SDL не гарантируется, хотя приятно, когда он работает.Я редко видел его в действии.

По моему опыту работы с SDL, вам придется использовать OpenGL, чтобы полностью исключить разрывы.Это своего рода корректировка, но рисование простых 2D-текстур не так уж и сложно, и вы получаете несколько других дополнительных бонусов, которые можно реализовать, таких как вращение, масштабирование, смешивание и так далее.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top