pygame
Dessin sur l'écran
Recherche…
dessiner des formes, du texte et des images sur l'écran avec une petite animation
Ce programme va dessiner des formes sur l'écran, dessinez "Bonjour tout le monde!" au milieu de l'écran et laisser une image aller à chaque coin de la fenêtre. Vous pouvez utiliser chaque image de votre choix , mais vous devrez placer le fichier image dans le même répertoire que votre programme.
le code entier:
import pygame, sys
from pygame.locals import *
pygame.init()
FPS = 30 #frames per second setting
fpsClock = pygame.time.Clock()
#set up the window
screen = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('animation')
#set up the colors
white = (255, 255, 255)
black = ( 0, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 180)
red = (255, 0, 0)
image = pygame.image.load('image.png')
imagex = 360
imagey = 260
direction = 'left'
# text setting
font_obj = pygame.font.Font('freesansbold.ttf', 32)
text_surface_obj = font_obj.render('Hello World!', True, GREEN, BLUE)
text_rect_obj = text_surface_obj.get_rect()
text_rectObj.center = (200, 150)
while True: # the main game loop
screen.fill(WHITE)
# draw a green polygon onto the surface
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
# draw some blue lines onto the surface
pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)
# draw a blue circle onto the surface
pygame.draw.circle(screen, blue, (300, 50), 20, 0)
# draw a red ellipse onto the surface
pygame.draw.ellipse(screen, red, (100, 150, 40,80), 1)
# draw a red rectangle onto the surface
pygame.draw.rect(screen,red, (200, 150, 100, 50))
# draw the text onto the surface
screen.blit(text_surface_obj, text_rect_obj)
#the animation of the image
if direction == 'right':
imagex += 5
if imagex == 360:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 260:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(image, (imagex, imagey))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
fpsClock.tick(FPS)
dessiner le fond blanc:
screen.fill(white)
dessiner le polygone:
Dans cette fonction, vous définissez la surface d'affichage, la couleur et la position de chaque coin du polygone, vous pouvez le faire dans le sens des aiguilles d'une montre et dans le sens inverse.
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
dessiner les lignes:
Vous définissez ici la surface d'affichage, la couleur, le premier et le dernier point et la largeur de la ligne.
pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)
dessiner le cercle:
Dans cette fonction, vous définissez la surface d'affichage, la couleur, la position, le rayon et la largeur du cercle (0 donne un cercle simple).
pygame.draw.circle(screen, blue, (300, 50), 20, 0)
dessiner l'ellipse:
Dans cette fonction, vous définissez la surface d'affichage, la couleur, la position, la taille horizontale, la taille verticale et la largeur de l'ellipse.
pygame.draw.ellipse(screen, red, (100, 150, 40,80), 1)
dessiner le rectangle:
Dans cette fonction, vous définissez la surface d'affichage, la couleur, la position et la verticale et la taille horizontale du rectangle.
pygame.draw.rect(screen,red, (200, 150, 100, 50))
définir le texte:
Tout d'abord, vous définissez le type et la taille de votre texte, j'utilise une police de base que vous obtenez avec pygame.
font_obj = pygame.font.Font('freesansbold.ttf', 32)
Vous définissez ensuite le texte réel, si vous le souhaitez en gras ou non (True / False), la couleur du texte et, si vous souhaitez marquer votre texte, une couleur du marquage.
text_surface_obj = font_obj.render('Hello World!', True, green, blue)
Si vous souhaitez marquer votre texte ou définir le centre de votre texte, vous devez indiquer à pygame que cette fonction:
text_rect_obj = text_surface_obj.get_rect()
Et après cela, vous pouvez définir le centre de votre texte avec cette fonction:
text_rect_obj.center = (200, 150)
dessiner le texte:
Si vous avez marqué votre texte ou défini le centre, vous devez dessiner le texte de cette manière:
screen.blit(text_surface_obj, text_rectObj)
Sinon, vous dessinez votre texte, mais vous devez définir la position, vous le faites ainsi:
DISPLAYSURF.blit(textSurfaceObj, (100,50))
définir l'image:
Vous définissez ici l'image que vous souhaitez utiliser, la position de départ (coordonnées x et y) et la direction de l'image.
image = pygame.image.load('image.png')
imagex = 360
imagey = 260
direction = 'left'
animer l'image:
Ici, vous contrôlez la direction de l'image, si elle a atteint un coin, si c'est le cas, changez de direction, sinon déplacez-la de 5 pixels dans la même direction et dessinez à nouveau l'image. C'est ce que nous faisons avec cette partie du code:
if direction == 'right':
imagex += 5
if imagex == 360:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 260:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(image, (imagex, imagey))
note: mon image est de 20 par 20 pixels, j'ai utilisé if imagex == 360
et if imagey == 260:
car alors mon image est à 20 pixels du bord, si votre image a une taille différente, vous devrez changer les chiffres .
vérifier si vous quittez le programme:
Ici, nous vérifions si vous avez fermé la fenêtre de votre programme.
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
mettre à jour l'affichage:
Ici, vous indiquez à pygame de mettre à jour l'affichage afin que tout ce que vous avez dessiné apparaisse à l'écran.
pygame.display.update()
définir les images par seconde:
Ici, vous dites à pygame de dormir suffisamment pour que le réglage des images par seconde soit respecté.
fpsClock.tick(FPS)