2009-12-09 7 views
1

Ce que j'essaie de faire est de créer une fenêtre d'affichage pour afficher une petite partie d'un arrière-plan. (Et plus tard, mettre des sprites).Pygame: Blisser un arrière-plan en mouvement crée trop de flou

Cependant, le problème que j'ai remarqué est qu'il semble y avoir un problème de flou en arrière-plan quand il commence à bouger. Je n'étais pas sûr si c'est parce que le blitting est lent ou à cause d'un problème dans le code. Je cherchais des exemples sur la façon dont les autres Blit ou créer des arrière-plans de défilement et trouvé cet article: Scrolling Games

J'ai utilisé leur exemple simple et bien sûr l'arrière-plan semble flou que vous faites défiler (alias blit l'arrière-plan avec un décalage). Je pensais aussi que ce pourrait être le FPS qui tombe pour une raison quelconque, mais cela ne change pas du tout. Je ne peux pas me souvenir d'un problème comme celui-ci avec d'autres jeux 2D. Je comprends qu'il peut y avoir un flou de mouvement dû à un changement constant. Je me demande juste si je peux faire quelque chose pour atténuer cela. Quelqu'un peut-il intervenir sur tout ce qui me manque peut-être? J'apprécierais n'importe quels commentaires ou aide. Merci

+1

Il serait utile si vous avez clarifié ce que vous entendez par "flou" ici. Je doute que vous obteniez quelque chose qui ressemble à ce que la plupart des gens appellent "flou de mouvement", car cela impliquerait de mélanger les couleurs des pixels. Obtenez-vous des mises à jour scintillantes ou saccadées? Avez-vous "déchirer", c'est-à-dire, voir la moitié supérieure d'un cadre et la moitié inférieure de l'image précédente? Voyez-vous des parties de plusieurs cadres mais pas une ligne nette entre eux? –

Répondre

0

Par "flou" voulez-vous dire que l'arrière-plan apparaît "doublé"? Obtenez-vous le même effet lorsque vous déplacez une image-objet de taille normale (64x64, par exemple)?

Si vous voyez du double, il s'agit probablement d'un problème de taux de rafraîchissement. L'activation de vsync peut aider.

Quelle fréquence d'images obtenez-vous?

Si vous ralentissez l'animation à environ 10 FPS, avez-vous le même problème?

3

Je ne pouvais pas savoir ce qui a causé le problème que vous avez rencontré, mais je suppose que c'est lié à la double mise en mémoire tampon.

Avez-vous utilisé au moins deux surfaces?

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

Si des images sont dessinées directement sur la surface de l'écran, il se produit un effleurement.