pygame
Les essentiels
Recherche…
Dessin et animation de base
Ce programme dessine des formes et ' bonjour le monde! 'et laisser une image aller à chaque coin de la fenêtre.
le code complet:
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((500,400), 0, 32)
pygame.display.set_caption('drawing')
#set up the colors
black = ( 0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = ( 0, 255, 0)
blue = ( 0, 0, 255)
imageImg = pygame.image.load('baddie.png')
imagex = 320
imagey = 220
direction = 'left'
fontObj = pygame.font.Font('freesansbold.ttf', 32)
text = fontObj.render('Hello World!', True, green, blue)
rect = text.get_rect()
rect.center = (200, 150)
# the main game loop
while True:
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), 100, 0)
# draw a red ellipse onto the surface
pygame.draw.ellipse(screen, red, (300, 250, 80,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, rect)
if direction == 'right':
imagex += 5
if imagex == 320:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 220:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(imageImg, (imagex, imagey))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
fpsClock.tick(FPS)
mettre en place pygame et la fenêtre:
import pygame,sys
from pygame.locals import *
pygame.init()
#set up the window
screen = pygame.display.set_mode((500,400), 0, 32)
pygame.display.set_caption('drawing')
dessiner le fond blanc:
Dans cette fonction, vous définissez la couleur de l'arrière-plan.
screen.fill(white)
dessiner le polygone vert:
Vous définissez ici la surface d'affichage, la couleur et la position de chaque coin du polygone (coordonnées x et y), que vous pouvez 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 bleues:
Dans cette fonction, vous définissez la surface d'affichage, la couleur, le premier et le dernier point et la largeur de la ligne (si vous ne donnez pas de largeur, c'est juste 1).
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 bleu:
Dans cette fonction, vous définissez la surface d'affichage, la couleur, la position, le rayon et la largeur du cercle (si vous donnez un 0 pour la largeur, c'est un cercle simple).
pygame.draw.circle(screen, blue, (300, 50), 100, 0)
dessiner l'ellipse:
Dans cette fonction, vous définissez la surface d'affichage, la couleur, la position, la taille horizontale et la taille et la largeur verticales.
pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)
dessiner le rectangle:
Dans cette fonction, vous définissez la surface d'affichage, la couleur, la position et la taille horizontale et verticale.
pygame.draw.rect(screen,red, (200, 150, 100, 50))
définir le texte:
Vous définissez d'abord le type et la taille de votre texte avec cette fonction:
fontObj = pygame.font.Font('freesansbold.ttf', 32)
Ensuite, vous définissez le texte réel, si le texte est en gras, la couleur et, si vous le souhaitez, la couleur du marquage. Vous pouvez le faire avec cette fonction:
text = fontObj.render('Hello World!', True, green, blue)
Si vous souhaitez marquer votre texte, vous devez dire à pygame que cette fonction:
rect = text.get_rect()
Et si vous voulez définir la position du centre du texte, vous pouvez le faire avec cette fonction:
rect.center = (200, 150)
dessiner le texte:
Si vous avez défini un marquage et / ou le centre:
screen.blit(text, rect)
Sinon, vous devez définir la position du texte afin de dessiner le texte de cette façon:
screen.blit(text, (100,50))
définir l'image:
Vous définissez ici l'image que vous souhaitez utiliser (si vous le faites de cette façon, le fichier image doit se trouver dans le même répertoire que votre fichier programme), la position de départ (x et y) et la direction de l'image.
image = pygame.image.load('image.png')
baddiex = 320
baddiey = 220
direction = 'left'
animer l'image:
Avec cette partie du code, nous vérifions la direction de l'image, si elle a atteint un coin, si c'est le cas, changez de direction, sinon tracez l'image 5 pixels plus loin dans la même direction.
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(imageImg, (imagex, imagey))
note: Mon image est 20x20 pixels, j'utilise if imagex == 360:
et if imagey == 260:
car alors mon image est à 20 pixels du bord de la fenêtre, tout comme les 2 autres coins. Si votre image a une taille différente, vous devrez probablement modifier ces chiffres.
vérification de quit:
Ici, nous vérifions si vous avez fermé la fenêtre Pygame, et si oui, fermez la fenêtre, si vous n'écrivez pas cela quelque part dans votre programme, vous ne pourrez probablement pas fermer la fenêtre.
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
mettre à jour l'écran:
Avec cette fonction, vous mettez à jour l'écran pour que tout ce que vous avez dessiné devienne visible.
pygame.display.update()
Réglage FPS:
Avec cette fonction, vous dites à Pygame de dormir suffisamment pour que votre réglage FPS soit respecté.
fpsClock.tick(FPS)
Utilisation avec PIL
Lorsque vous devez utiliser à la fois PIL et Pygame, car il manque des fonctionnalités dans les deux, vous avez besoin d'un moyen de convertir entre les surfaces Pygame et les images PIL, de préférence sans les écrire sur le disque.
Pour cela, vous pouvez utiliser les fonctions "tostring" et "fromstring" fournies dans les deux bibliothèques.
Conversion de PIL à Pygame:
strFormat = 'RGBA'
raw_str = image.tostring("raw", strFormat)
surface = pygame.image.fromstring(raw_str, image.size, strFormat)
Conversion de Pygame à PIL:
strFormat = 'RGBA'
raw_str = pygame.image.tostring(surface, strFormat, False)
image = Image.frombytes(strFormat, surface.get_size(), raw_str)