# pyg0050_defilement_image.py ''' Reprise de pyg0020.py L'image de fond a été reprise et dupliqué en miroir à droite de l'image d'origine, pour doner une image de 1280 pixels (0 à 1279) Donc l'image est ainsi continue, sans raccords. On peut ainsi afficher l'image en la décalant, et qui donne une impression de défilement du fond. ''' import pygame from pygame.locals import * import os # Pour positionner la fenêtre Pygame. #os.environ['SDL_VIDEO_WINDOW_POS'] = '20,100' os.environ['SDL_VIDEO_WINDOW_POS'] = '%d,%d' % (120, 200) # Information sur le display # https://www.pygame.org/docs/ref/display.html # Initialisation des modules de Pygame pygame.init() # Création d'une fenêtre graphique de Pygame ##fenetre = pygame.display.set_mode((640, 480)) # Permet de rendre la fenêtre de taille ajustable. fenetre = pygame.display.set_mode((640,480), RESIZABLE) # Une image pour le fond de la fenêtre fond = pygame.image.load("images/background_herbe_double.jpg").convert() perso1 = pygame.image.load("images/perso_1.png").convert_alpha() # Ne fonctionne pas !??? perso1.set_colorkey((255,255,255)) #Rend le blanc (valeur RGB : 255,255,255) de l'image transparent # Position de la personne relativement au fond nPosX = 200 # Position en X de la personne nPosY = 200 # Position en Y de la personne nPosYMax = 1279 # Affiche l'image dans la fenêtre fenetre.blit(fond, (-nPosX, 0)) fenetre.blit(fond, (nPosYMax-nPosX, 0)) # Affiche le personnage au-dessus de l'herbe fenetre.blit(perso1, (290, nPosY)) # Actualise la fenêtre pygame.display.flip() # Pour avoir un autorepeat si une touche est pressée. pygame.key.set_repeat(10, 3) # répétition de la touche toutes les ... [ms] # Variable qui continue la boucle si = 1, stoppe si = 0 continuer = 1 # ================================================ # Boucle principale while continuer: # Boucle sur tous les événements gérés par Pygame for event in pygame.event.get(): if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE: # La fenêtre a été fermée ou La touche ESC a été pressée. continuer = 0 # Indique de sortire de la boucle. if event.type == KEYDOWN: # KEYUP existe aussi # Change les coordonnées de la position de la personne if event.key == K_RIGHT: nPosX += 1 if event.key == K_LEFT: nPosX -= 1 if event.key == K_UP: nPosY -= 1 if event.key == K_DOWN: nPosY += 1 # Affiche le fond, puis la personne par-dessus fenetre.blit(fond, (-nPosX, 0)) fenetre.blit(fond, (nPosYMax-nPosX, 0)) fenetre.blit(perso1, (290, nPosY)) # Actualise la fenêtre pygame.display.flip() if event.type == MOUSEBUTTONDOWN: # Un bouton de la souris pressé if event.button == 1: # Boutton gauche pressé # Change les coordonnées de la position de la personne nPosX = event.pos[0] # Coordonnées du pointeur de souris nPosY = event.pos[1] if event.button == 3: # Boutton droit pressé # Change les coordonnées de la position de la personne nPosX = event.pos[0] - perso1.get_width() nPosY = event.pos[1] - perso1.get_height() # Affiche le fond, puis la personne par-dessus fenetre.blit(fond, (-nPosX, 0)) fenetre.blit(fond, (nPosYMax-nPosX, 0)) fenetre.blit(perso1, (290, nPosY)) # Actualise la fenêtre pygame.display.flip() if event.type == MOUSEMOTION: # La souris a bougé if event.buttons[0] == 1: # Boutton gauche pressé # Change les coordonnées de la position de la personne nPosX = event.pos[0] # Coordonnées du pointeur de souris nPosY = event.pos[1] ##if event.buttons[1] == 1: # Boutton du milieu pressé if event.buttons[2] == 1: # Boutton du milieu pressé # Change les coordonnées de la position de la personne nPosX = event.pos[0] - perso1.get_width() nPosY = event.pos[1] - perso1.get_height() # Affiche le fond, puis la personne par-dessus fenetre.blit(fond, (-nPosX, 0)) fenetre.blit(fond, (nPosYMax-nPosX, 0)) fenetre.blit(perso1, (290, nPosY)) # Actualise la fenêtre pygame.display.flip() # Limite nPosX dans l'intervalle [0 ; 640] if (nPosX < 0): nPosX += nPosYMax+1 if (nPosX > nPosYMax): nPosX -= nPosYMax+1 pygame.display.quit() # ferme la fenêtre, c.f. https://www.pygame.org/docs/ref/display.html pygame.quit() # quitte pygame, c.f. https://www.pygame.org/docs/ref/pygame.html