Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème défilement fond

    18 décembre 2016 à 19:37:33

    Bonsoir,

    Je suis débutante en Python. Je travaille actuellement sur les événements claviers et le défilement de fond avec Pygame. 

    J'ai importé une image plus grande que ma fenêtre afin d'avoir un défilement de ce fond. J'ai modifié l'événement clavier afin que le défilement de fond s'arrête lorsqu'on arrive à la limite de l'image, cependant lorsque je lance le programme le défilement du fond s'effectue d'une traite/n'est pas progressif, ce qui fait que je passe directement de la position initiale du poisson (sujet qui bouge selon les mouvements de la souris) jusqu'à la position limite. Pouvez m'aider à régler ce problème ? Merci de votre réponse :)

    Voici le code :

    import pygame,sys

    from pygame.locals import *

    pygame.init()

    pygame.mouse.set_visible(False)

    fen=pygame.display.set_mode((800,525))

    pygame.display.set_caption("Fond marin")

    fond = pygame.image.load("NY.jpg").convert_alpha()

    xfond=0

    yfond=0

    fen.blit(fond,(0,0))

    pois1=pygame.image.load("poissonpecheureteint.png").convert_alpha()

    pois2=pygame.image.load("poissonpecheurallume.png").convert_alpha()

    pygame.display.update()

    while True:

        for evenement in pygame.event.get():

            if evenement.type==pygame.MOUSEMOTION:

                x,y=evenement.pos

                if x>650:

                    while xfond!=-400:

                        xfond=xfond-5

                if y>350:

                    while yfond!=-425:

                        yfond=yfond-5

                fen.blit(fond,(xfond,yfond))

                fen.blit(pois1,(x-87,y-63))

                pygame.display.update()

            if evenement.type==pygame.MOUSEBUTTONDOWN:

                if evenement.button==1:

                    x,y=evenement.pos

                    fen.blit(fond,(0,0))

                    fen.blit(pois2,(x-87,y-63))

                    pygame.display.update()

            if evenement.type==pygame.MOUSEBUTTONUP:

                x,y=evenement.pos

                fen.blit(fond,(0,0))

                fen.blit(pois1,(x-87,y-63))

                pygame.display.update()

            if evenement.type==QUIT:

                pygame.quit()

                sys.exit()

    pygame.display.update()

    • Partager sur Facebook
    • Partager sur Twitter
      21 décembre 2016 à 19:39:40

      Bonsoir,

      Le problème provient de ta boucle :

      if x>650:
          while xfond!=-400:
              xfond=xfond-5
      

      si tu fais ça, le programme va uniquement recalculer la position en x de ton fond sans l'actualiser.

      il faut donc que tu rajoute une ligne actualisant ton qui doit être "fen.blit(fond, (xfond, yfond))"

      Mais là il y aura un autre soucis je pense qui va être que ton fond va défiler, sans que tu puisses agir. Tu ne pourras agir qu'à la fin du défilement car ta boucle de défilement n'est pas assez large.

      Il faut construire une plus grande boucle dans laquelle tu met tout :

      - le défilement en x

      - le défilement en y

      - les évènements

      En espérant t'avoir aidée :)

      • Partager sur Facebook
      • Partager sur Twitter
      fabien
        21 décembre 2016 à 19:44:26

        Merci d'utiliser les balises de code lorsque vous postez votre code, cela le rend beaucoup plus lisible et ne décourage pas ceux qui seraient tentés d'aider.
        • Partager sur Facebook
        • Partager sur Twitter

        Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.

        Problème défilement fond

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown