Guía Rápida de Pygame
La participación en la Global Game Jam 2010 me ayudó a mejorar mi conocimiento de Pygame, una librería multimedia orientada al desarrollo de videojuegos con Python. En esta guía rápida -en la que sólo cubriré temas básicos y generales-, voy a suponer que el lector está familiarizado con la sintaxis de Python, y si no, lean un tutorial rápido antes de aprender Pygame!
Manos a la obra
Inicializar Pygame y módulos necesarios:
import pygame #carga el modulo de pygame from pygame.locals import * #para que funcione QUIT pygame.init() #inicializa pygame pygame.mixer.init(44100,-16,2,1024) #inicializa el sonido
Crear una ventana:
pantalla = pygame.display.set_mode((ANCHO,ALTO),FLAGS,CANT_PROFUNDIDAD_BITS) #leer mas abajo pygame.display.set_caption("Tutorial Rapido") #titulo de la ventana
Los FLAGs pueden ser: (se pueden separar con | )
- 0: ninguno
- FULLSCREEN: pantalla completa
- DOUBLEBUF: Uso de display con doble buffer
- HWSURFACE: Establece que el display sea manejado con Hardware
- OPENGL: Añade soporte para OpenGl en nuestra aplicación
- RESIZABLE: La ventana se puede redimensionar
- NOFRAME: La ventana no tiene bordes ni barra de título
Bucle Principal:
while True: for event in pygame.event.get(): #captura de eventos if event.type == QUIT: #si quiere cerrar la ventana exit() #salgo de la aplicacion, requiere "from sys import exit" #............ # dibujar cosas en pantalla y detectar eventos pygame.display.update() #actualizar pantalla
Nota: las cosas que siguen deben hacerse en el bucle principal para que se mantengan en el tiempo
Dibujando en pantalla:
pantalla.blit(recurso, (posX,posY)) # recurso puede ser una imagen o un texto
Cargando y dibujando imágenes:
mi_imagen = pygame.image.load('directorio/subdirectorio/archivo.png') pantalla.blit(mi_imagen,(posX, posY))
Dibujando texto:
pantalla.blit(pygame.font.Font(FUENTE.ttf, TAMAÑO).render(str("Texto"), True, COLOR), (posX, posY))) #fuente se puede omitir poniendo None para que dibuje con la fuente por defecto. El valor True antes de COLOR es para dibujar con antialiasing
Detectando eventos:
for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.TECLA: #detecto la TECLA if pygame.mouse.get_pressed()[NUM_BOTON] == True: #detecto NUM_BOTON, 0 para el primario, 1 para el secundario, 2 para otro
Nota: TECLA debe ser el código de alguna tecla, en formato SDL. Más Información
Reproduciendo Música y Sonidos:
Pygame tiene dos formas de reproducir audio, pygame.mixer.Sound es para sonidos cortos que empiezan y terminan, mientras que pygame.mixer.music reproduce música en segundo plano, ideal para música de fondo. Soporta archivos wav y ogg.
Música:
pygame.mixer.music.load('ARCHIVO.ogg') #carga el archivo pygame.mixer.music.play(REPETICIONES,INICIAR_DESDE) #lo reproduce pygame.mixer.music.stop() #detiene la reproduccion
REPETICIONES puede tomar los siguientes valores:
- None: se reproduce sólo una vez
- 1..n: se reproduce n veces
- -1: se reproduce infinitamente
INICIAR_DESDE es el tiempo en milisegundos desde donde queremos que se empiece a reproducir el archivo. Si lo ponemos en negativo, va a esperar esa cantidad de milisegundos desde esa línea antes de reproducirse.
Sonido:
sonido = pygame.mixer.Sound('archivo.wav') #carga el archivo sonido.play() #lo reproduce sonido.fadeout(MILISEGUNDOS) #baja el volumen durante MILISEGUNDOS y luego detiene la reproduccion
Definir nuestros propios eventos:
MI_EVENTO = pygame.USEREVENT+k #k es un identificador de evento, todos tienen que tener valores distintos, por ejemplo 1, 2, 3... if event.type == MI_EVENTO: #manejar el evento
Esto es todo por hoy, como dije es una guía muy básica para que puedan empezar.
Por último, comparto un ejemplo en el que aplicamos todo lo explicado.
DESCARGA DEL EJEMPLO
Nota: demás está decir que se necesita python y pygame instalados…
Enlaces:
Sitio web de Python
Sitio web de Pygame
Nota sobre Pygame en Windows:
Como dice en la página de Pygame, si van a usarlo con Windows, por ahora se recomienda que usen la versión 2.5.4 de Python (que no es la última). La descargan desde aquí.
about 5 months ago
Muchas gracias por el post espero que seguiureis posteando de pygame me ayudo mucho pero tengo problema con cargar imagines escribo
imagen = pygame.image.load(“ruta”)
screen.blit(imagen, (0, 0))
no me sale ningun error pero imagen tampoco aparece
i lo de bucle me sale error de que variable no existe “event”
uso python 2.6.4 pygame1.9.1 y windows Vista no me digais que es por vista que lo probe en xp y 98 lomismo
about 5 months ago
Qué bueno que te haya ayudado!
¿La ruta de la imagen la pusiste bien? Es decir, entre comillas simples y SIN barra al inicio. También puede ser por windows, probá en vez de ‘/’, poner ‘\\’ en la dirección de la imagen…
¡OJO que el blit tiene que estar en el bucle principal! Sino es como si mostrara la imagen un milisegundo y despues la borra…
Con respecto a event, podés poner la parte del código donde esta pygame.event.get() ? De primera, no sé qué puede ser el error.
about 5 months ago
El problema de las imágenes es que parlante está en formato *.PNG mientras que en la linea 17 dice parlante = pygame.image.load(‘image/parlante.png’).
Para corregir dicho problema solo hace falta cambiar a la img a la extensión .png o bien la linea 17 por PNG.
Como más les guste.
about 5 months ago
A pesar de lo que dice germanazo es cierto, en mi caso se ejecuta igual (seguro porque lo hice en windows y no le da bola al case sensitive), así que ese debe ser el error.
Gracias germanazo (socio de marian0
) por la ayuda.