2009-12-09 5 views
1

То, что я пытаюсь сделать, - создать окно просмотра, чтобы просмотреть небольшую часть фона. (И позже положил спрайтов).Pygame: Blitting the moving background создает слишком много размытия

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

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

+1

Это поможет, если вы разъясните, что вы подразумеваете под «размыванием» здесь. Я сомневаюсь, что вы получаете что-то похожее на то, что большинство людей назвали бы «motion blur», поскольку это влечет за собой смешение цветов пикселей. Вы получаете мерцающие или отрывистые обновления? Вы получаете «разрыв», т. Е. Видя верхнюю половину одного кадра и нижнюю половину предыдущего кадра? Вы видите части нескольких кадров, но не чистую линию между ними? –

ответ

0

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

Если вы видите двойное, то это, вероятно, проблема с частотой обновления. Включение vsync может помочь.

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

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

3

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

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

# 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() 

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