pygame
Dibujo en la pantalla
Buscar..
Dibujar formas, texto e imágenes en la pantalla con una pequeña animación.
Este programa dibujará algunas formas en la pantalla, dibuja "¡Hola mundo!" en el centro de la pantalla y deja que una imagen vaya a cada esquina de la ventana. Puede usar cada imagen que desee, pero tendrá que colocar el archivo de imagen en el mismo directorio que su programa.
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((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)
dibujando el fondo blanco:
screen.fill(white)
dibujando el polígono:
En esta función, define la superficie de visualización, el color y la posición de cada esquina del polígono, puede hacerlo en el sentido de las agujas del reloj y en el sentido contrario a las agujas del reloj.
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
dibujando las líneas:
Aquí se define la superficie de visualización, el color, el primer y último punto y el ancho de la línea.
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
En esta función, se define la superficie de visualización, el color, la posición, el radio y el ancho del círculo (0 da un círculo plano).
pygame.draw.circle(screen, blue, (300, 50), 20, 0)
dibujando la elipse:
En esta función se define la superficie de visualización, el color, la posición, el tamaño horizontal, el tamaño vertical y el ancho de la elipse.
pygame.draw.ellipse(screen, red, (100, 150, 40,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 vertical y horizontal del rectángulo.
pygame.draw.rect(screen,red, (200, 150, 100, 50))
definiendo el texto:
Primero define el tipo y el tamaño de su texto, uso una fuente básica que obtiene con pygame.
font_obj = pygame.font.Font('freesansbold.ttf', 32)
Luego define el texto real, si lo quiere en negrita o no (Verdadero / Falso), el color del texto y, si desea marcar su texto, un color de la marca.
text_surface_obj = font_obj.render('Hello World!', True, green, blue)
Si quieres marcar tu texto o quieres definir el centro de tu texto, debes decirle a pygame que con esta función:
text_rect_obj = text_surface_obj.get_rect()
Y después de eso, puedes definir el centro de tu texto con esta función:
text_rect_obj.center = (200, 150)
dibujando el texto:
Si marcó su texto o definió el centro, debe dibujar el texto de esta manera:
screen.blit(text_surface_obj, text_rectObj)
De lo contrario, dibuja su texto, pero necesita definir la posición, por lo que lo hace de esta manera:
DISPLAYSURF.blit(textSurfaceObj, (100,50))
definiendo la imagen:
Aquí define la imagen que desea utilizar, la posición de inicio (coordenadas x e y) y la dirección de la imagen.
image = pygame.image.load('image.png')
imagex = 360
imagey = 260
direction = 'left'
animando la imagen:
Aquí verifica la dirección de la imagen, si llegó a una esquina, si es así cambia la dirección, si no, muévala 5 píxeles en la misma dirección y dibuje la imagen nuevamente. Eso es lo que hacemos con esta parte del código:
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))
nota: mi imagen es de 20 por 20 píxeles, usé if imagex == 360
y if imagey == 260:
porque mi imagen está a 20 píxeles desde el borde, si su imagen tiene un tamaño diferente, tendrá que cambiar los números .
comprobando si abandonas el programa:
Aquí comprobamos si cerraste la ventana de tu programa.
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
actualizando la pantalla:
Aquí le dice a pygame que actualice la pantalla para que todo lo que ha dibujado aparezca en la pantalla.
pygame.display.update()
definiendo los cuadros por segundo:
Aquí le dices a Pygame que duerma lo suficiente para que se respete la configuración de cuadros por segundo.
fpsClock.tick(FPS)