Pygame: мигание движущегося фона создает слишком сильное размытие

Я пытаюсь создать окно просмотра для просмотра небольшой части фона. (А позже добавил спрайты).

Однако проблема, которую я заметил, заключается в том, что возникает проблема размытия фона, когда он начинает двигаться. Я не был уверен, связано ли это с медленным копированием или с проблемой в коде. Я искал примеры того, как другие создают блики или фоны для прокрутки, и нашел эту статью: Игры с прокруткой

Я использовал их простой пример, и, конечно же, фон выглядит размытым при прокрутке (т. е. затемнение фона со смещением). Я также думал, что это может быть падение FPS по какой-то причине, но оно не отклоняется вообще. Я не могу припомнить такой проблемы с другими 2D-играми. Я понимаю, что может быть некоторое размытие движения из-за того, что оно постоянно смещается. Просто интересно, могу ли я сделать что-нибудь, чтобы облегчить это. Может ли кто-нибудь подсказать, что я могу упустить? Буду признателен за любую обратную связь или помощь. Спасибо


person Chuck    schedule 09.12.2009    source источник
comment
Было бы полезно, если бы вы уточнили, что вы имеете в виду под размытием здесь. Я сомневаюсь, что вы получаете что-то похожее на то, что большинство людей назвало бы размытием в движении, поскольку это повлечет за собой смешивание цветов пикселей. Вы получаете мерцающие или прерывистые обновления? Вы начинаете разрываться, то есть видите верхнюю половину одного кадра и нижнюю половину предыдущего кадра? Вы видите части нескольких кадров, но не видите четкой линии между ними?   -  person C. A. McCann    schedule 10.12.2009


Ответы (2)


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

Вы использовали как минимум две поверхности?

# preparing two surfaces in __init__()
screen = pygame.display.set_mode((800,600))
background = pygame.Surface(screen.get_size())
background.fill((250, 250, 250))

# called at every step in main loop
# draw images on the background surface
background.blit(image, position)
....

# blit background to screen
screen.blit(background, (0, 0))
pygame.display.flip()

Если изображения рисуются непосредственно на поверхности экрана, происходит перелистывание.

person grayger    schedule 09.12.2009

Под «размытым» вы подразумеваете, что фон кажется «двоящимся»? Получаете ли вы тот же эффект при перемещении спрайта нормального размера (например, 64x64)?

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

Какую частоту кадров вы получаете?

Если вы замедлите анимацию примерно до 10 кадров в секунду, возникнет ли у вас та же проблема?

person Seth    schedule 09.12.2009