pygame
Lo escencial
Buscar..
Dibujo y una animación básica.
Este programa dibuja algunas formas y ' hola mundo! 'y dejar que una imagen vaya a cada esquina de la ventana.
el código completo:
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)
configurando pygame y la ventana:
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')
dibujando el fondo blanco:
En esta función se define el color del fondo.
screen.fill(white)
dibujando el polígono verde:
Aquí define la superficie de visualización, el color y la posición de cada esquina del polígono (coordenadas x e y), puede hacerlo en sentido horario y antihorario.
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
dibujando las lineas azules:
En esta función, se define la superficie de visualización, el color, el primer y último punto y el ancho de la línea (si no da un ancho, es solo 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)
dibujando el circulo azul:
En esta función, define la superficie de visualización, el color, la posición, el radio y el ancho del círculo (si da un 0 para el ancho, es un círculo plano).
pygame.draw.circle(screen, blue, (300, 50), 100, 0)
dibujando la elipse:
En esta función usted define la superficie de visualización, el color, la posición, el tamaño horizontal y el tamaño vertical y el ancho.
pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)
dibujando el rectángulo:
En esta función, se define la superficie de visualización, el color, la posición y el tamaño horizontal y vertical.
pygame.draw.rect(screen,red, (200, 150, 100, 50))
definiendo el texto:
Primero, defina el tipo y el tamaño de su texto con esta función:
fontObj = pygame.font.Font('freesansbold.ttf', 32)
A continuación, defina el texto real, si el texto está en negrita, el color y, si lo desea, el color de la marca. Puedes hacer eso con esta función:
text = fontObj.render('Hello World!', True, green, blue)
Si quieres marcar tu texto, debes decirle a pygame que con esta función:
rect = text.get_rect()
Y si desea definir la posición del centro del texto, puede hacerlo con esta función:
rect.center = (200, 150)
dibujando el texto:
Si ha definido una marca y / o el centro:
screen.blit(text, rect)
De lo contrario, debe definir la posición del texto, así que dibuje el texto de esta manera:
screen.blit(text, (100,50))
definiendo la imagen:
Aquí usted define qué imagen desea usar (si lo hace de esta manera, el archivo de imagen debe estar en el mismo directorio que el archivo de su programa), la posición de inicio (xey) y la dirección de la imagen.
image = pygame.image.load('image.png')
baddiex = 320
baddiey = 220
direction = 'left'
animando la imagen:
Con esta parte del código verificamos la dirección de la imagen, si llegó a una esquina, si es así, cambiamos la dirección, si no, dibujamos la imagen 5 píxeles más en la misma dirección.
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))
nota: mi imagen es de 20x20 píxeles, la uso if imagex == 360:
y if imagey == 260:
porque mi imagen está a 20 píxeles desde el borde de la ventana, al igual que las otras 2 esquinas. Si su imagen tiene un tamaño diferente, probablemente tendrá que cambiar esos números.
comprobando para dejar de fumar:
Aquí verificamos si cerró la ventana de pygame, y si es así, cierre la ventana, si no escribe esto en algún lugar de su programa, probablemente no podrá cerrar la ventana.
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
actualizando la pantalla:
Con esta función usted actualiza la pantalla para que todo lo que ha dibujado se haga visible.
pygame.display.update()
Ajuste de FPS:
Con esta función le dices a Pygame que duerma lo suficiente para que se respete tu configuración de FPS.
fpsClock.tick(FPS)
Usando con PIL
Cuando tienes que usar tanto PIL como Pygame porque faltan funcionalidades en ambos, necesitas una forma de convertir entre Pygame Surfaces y PIL Images, preferiblemente sin escribirlas en el disco.
Para eso puede usar las funciones "tostring" y "fromstring" que se proporcionan en ambas bibliotecas.
Conversión de PIL a Pygame:
strFormat = 'RGBA'
raw_str = image.tostring("raw", strFormat)
surface = pygame.image.fromstring(raw_str, image.size, strFormat)
Conversión de Pygame a PIL:
strFormat = 'RGBA'
raw_str = pygame.image.tostring(surface, strFormat, False)
image = Image.frombytes(strFormat, surface.get_size(), raw_str)