Outils pour utilisateurs

Outils du site


isn:pygame02

Pygame : gérer une image

Utiliser des images

Choisissez une image png et téléchargez-là sur le site. Comme exemple, ce sera l'image fraise.png qui sera utilisée.

Pour ce projet l'image :

  • doit avoir les dimensions de 40×40 pixels,
  • a le coin supérieur gauche positionné aux coordonnées (50, 50).

Voici les variables à définir :

# image FRAISE
x_fraise = 50 
y_fraise = 50 
largeur_fraise = 40 
hauteur_fraise = 40 
IMG_FRAISE = pygame.image.load("fraise.png")

Déplacement de l'image avec le clavier

Voici les déplacement à gérer :

  • Quand on appuie sur la touche [Flèche à droite] du clavier, la fraise de déplace à droite.
  • Quand on appuie sur la touche [Flèche à gauche] du clavier, la fraise de déplace à gauche
for event in pygame.event.get():  
   if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_RIGHT: 
           x_fraise = x_fraise + 4  
       elif event.key == pygame.K_LEFT: 
            x_fraise = x_fraise - 4   

Pour indiquer à Pygame d'afficher l'image en fonction des coordonnées :

ECRAN.blit(IMG_FRAISE, (x_fraise, y_fraise))

Le programme complet

import pygame
pygame.init()
HAUTEUR = 400
LARGEUR = 400
COULEUR_FOND = (255, 255, 255)
ECRAN = pygame.display.set_mode((LARGEUR, HAUTEUR))
ARRET = False
 
# image FRAISE
x_fraise = 50
y_fraise = 50
largeur_fraise = 40
hauteur_fraise = 40
IMG_FRAISE = pygame.image.load("fraise.png")
 
while not ARRET:
  ECRAN.fill(COULEUR_FOND)
  for event in pygame.event.get():
     if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_ESCAPE:
           ARRET = True
        elif event.key == pygame.K_RIGHT:
           x_fraise = x_fraise + 4
        elif event.key == pygame.K_LEFT:
           x_fraise = x_fraise - 4 
 
  ECRAN.blit(IMG_FRAISE, (x_fraise, y_fraise))
  pygame.display.update()

Déplacement automatique d'une image

Cette fois -ci c'est image d'un ballon qui va se déplacer de gauche à droite. N'oubliez pas de télécharger cette image ballon.png

Voici les variables à définir :

# image Ballon
x_ballon = 10 
y_ballon = 10 
largeur_ballon = 20 
hauteur_ballon = 20 
IMG_BALLON = pygame.image.load("ballon.png")

Précisons la vitesse de déplacement du ballon sur les axes x et y .

ballonSpeed = [1,  0] 

Création d'une surface invisible qui correspond aux dimensions du ballon

ballonRect = IMG_BALLON.get_rect()

En Pygame, la notion de surface est fondamentale, car la manipulation de cet élément de géométrie est un aspect important et conséquent du développement du jeu vidéo. Une surface correspond à une ligne affichée sur l’écran ou à un polygone affiché sur l’écran ; ce polygone peut être rempli de couleur, ou non. Une part importante de la gestion graphique consistera donc à créer et à manipuler les surfaces Pygame.

Pour déplacer le ballon à chaque itération, on inclut l'image du ballon dans la surface rectangle et on déplace cette surface :

ECRAN.blit(IMG_BALLON, ballonRect)
ballonRect = ballonRect.move(ballonSpeed)

Quand le ballon quitte la fenêtre, on inverse la vitesse de déplacement :

 if ballonRect.right > LARGEUR: 
    ballonSpeed[0] = - ballonSpeed[0]

Pour gérer la vitesse de rafraîchissement de l'écran, on peut introduite un délai en millisecondes. Par exemple un délai de 100 millisecondes fera exécuter la boucle 10 fois par seconde :

pygame.time.delay(100)

Une autre solution consiste à définir le nombre maximum d'images par seconde avec la fonction tick de l'objet Clock de Pygame :

clock = pygame.time.Clock()
 
# dans la boucle de jeu définir un maximum de 20 images par seconde
clock.tick(20)

Le programme complet

import pygame
pygame.init()
HAUTEUR = 400
LARGEUR = 400
COULEUR_FOND = (255, 255, 255)
ECRAN = pygame.display.set_mode((LARGEUR, HAUTEUR))
ARRET = False
 
# image FRAISE
x_fraise = 50
y_fraise = 50
largeur_fraise = 40
hauteur_fraise = 40
IMG_FRAISE = pygame.image.load("fraise.png")
 
# image Ballon
x_ballon = 10
y_ballon = 10
largeur_ballon = 20
hauteur_ballon = 20
IMG_BALLON = pygame.image.load("ballon.png")
ballonSpeed = [1,  0]
#IMG_BALLON.move(ballonSpeed)
ballonRect = IMG_BALLON.get_rect()
while not ARRET:
  pygame.time.delay(100)
  ECRAN.fill(COULEUR_FOND)
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      sys.exit()
    elif event.type == pygame.KEYDOWN:
      if event.key == pygame.K_RIGHT:
        x_fraise = x_fraise + 4
      elif event.key == pygame.K_LEFT:
        x_fraise = x_fraise - 4  
 
  ECRAN.blit(IMG_FRAISE, (x_fraise, y_fraise))
 
  ECRAN.blit(IMG_BALLON, ballonRect)
  ballonRect = ballonRect.move(ballonSpeed)
  if ballonRect.right > LARGEUR: 
    ballonSpeed[0] = - ballonSpeed[0]
 
  pygame.display.update()

Les activités ...

Les activités ...

isn/pygame02.txt · Dernière modification: 2019/11/14 10:31 de techer.charles_educ-valadon-limoges.fr