Principales módulos de Pygame
Introducción
Aquí la idea es proporcionar una documentación relativamente precisa de los principales módulos y objetos de Pygame utilizados en el libro. De hecho, aunque la documentación oficial en línea es excelente, actualmente no hay documentación disponible en castellano. El objetivo no es cubrir exhaustivamente cada módulo, sino al menos tener una documentación muy completa de las funciones utilizadas con frecuencia en el desarrollo con Pygame. Solo se ignoran las funciones utilizadas con poca frecuencia.
La documentación oficial en línea de Pygame está disponible en la dirección web: https://www.pygame.org/docs/
Los módulos u objetos detallados aquí están en el orden de su primer uso en el libro:
1. Color
2. time
3. event
4. display
5. Surface
6. draw
7. image
8. font
9. mouse
10. key
11. transform
12. mixer
13. music
14. sprite
Una aclaración en cuanto a una notación que se usará con regularidad: la siguiente línea significa que la llamada a la función Ejemplo1, que recibe como argumento a y b, devuelve un int.
Ejemplo1(a, b) -> int
Otro ejemplo, la función Ejemplo2 que recibe como argumento i, j y k devuelve un objeto de tipo Color.
Ejemplo2( i, j, k) -> Color
El objeto Color
1. La clase Color
La clase Color se utiliza para crear instancias de objetos que representan colores.
Los colores se definen mediante una tupla (r, g, b, a):
-
r representa el componente rojo, un valor entre 0 y 255.
-
g representa el componente verde, un valor entre 0 y 255.
-
b representa el componente azul, un valor entre 0 y 255.
-
a representa el componente alfa que define la opacidad asociada, es un valor entre 0 y 255. 255 representa la opacidad total y es el valor predeterminado. Bajar este valor significa bajar un poco la opacidad y hacer que el elemento coloreado (un píxel o una forma geométrica) sea un poco más transparente.
2. Los constructores de Color
Hay tres funciones de tipo constructor para crear un objeto Color:
Color(r, g, b) -> Color
Color(r, g, b, a=255) -> Color
Color(color_value) -> Color
Por lo tanto, podemos crear un objeto Color pasando los argumentos r, g y b. También podemos especificar a (alfa), cuyo valor predeterminado es 255.
3. Las principales funciones de la clase Color
Función de tipo descriptor de acceso que permite obtener o modificar la cantidad r:
pygame.Color.r
Función de tipo descriptor de acceso que permite obtener o modificar la cantidad g:
pygame.Color.g
Función de tipo descriptor de acceso que permite obtener o modificar la cantidad b:
pygame.Color.b
Una función de tipo descriptor de acceso que permite obtener o modificar la cantidad a (alfa)....
El módulo Time
1. La función get_ticks
get_ticks() -> milisegundos
Esta función se utiliza para obtener el número de milisegundos entre la inicialización de Pygame (llamada pygame.init()) y la llamada de esta función get_ticks.
Por ejemplo, al ejecutar este programa:
import pygame
pygame.init()
screen=pygame.display.set_mode((200,400))
print(pygame.time.get_ticks())
obtenemos (en la máquina utilizada) el siguiente valor en el terminal:
1727
Esto significa que entre la llamada de init y la llamada de get_ticks, hubo una duración de 1 a 2 segundos.
2. La función wait
wait(milisegundos) -> time
La función wait permite pausar la ejecución durante un período de tiempo expresado en milisegundos.
3. La función delay
delay(milisegundos) -> time
La función delay, como wait, permite pausar la ejecución durante un período de tiempo expresado en milisegundos. Utiliza el procesador del ordenador y, por lo tanto, se supone que es más precisa que wait.
4. La función set_timer
set_timer(eventid, milisegundos) -> None
Esta función set_timer permite crear un evento que se coloca en la cola de los eventos. Se activa cíclicamente cada x milisegundos, donde x es el valor que se pasa como argumento.
Por ejemplo, en el código siguiente, activamos un evento cada segundo.
import pygame
pygame.init()
screen=pygame.display.set_mode((200,400)) ...
El módulo event
El módulo event permite administrar eventos. Tan pronto como se genera un evento, desde un teclado, ratón u otro periférico de juego, se coloca en una cola que el módulo event permite administrar y usar. El papel de las funciones de este módulo es interactuar con la cola de eventos.
Un evento se define primero por su tipo EventType. Los valores principales de este argumento son:
QUIT 0
ACTIVEEVENT 1
KEYDOWN 2
KEYUP 3
MOUSEMOTION 4
MOUSEBUTTONUP 5
MOUSEBUTTONDOWN 6
JOYAXISMOTION 7
JOYBALLMOTION 8
JOYHATMOTION 9
JOYBUTTONUP 10
JOYBUTTONDOWN 11
VIDEORESIZE 12
VIDEOEXPOSE 13
USEREVENT 14
1. La función pump
pump() -> None
Es muy raro tener que utilizar esta función. Se corresponde con la siguiente situación: no utilizar eventos en el bucle de juego. En este caso, todavía es necesario mantener...
El módulo display
Este módulo se utiliza sistemáticamente en un código Pygame, ya que gestiona todos los aspectos relacionados con la ventana del juego. En el módulo pygame se puede llamar directamente a algunas funciones de display.
Así:
pygame.init()
es equivalente a:
pygame.display.init()
1. La función init
init() -> None
Esta es la función que permite inicializar Pygame. No podemos prescindir de ella y la usamos sistemáticamente en cada código de Pygame. Tenga en cuenta que los dos códigos siguientes son equivalentes y que, en general, es preferible el segundo.
pygame.display.init()
pygame.init()
2. La función quit
quit() -> None
Esta es la función que permite detener el uso del módulo display y, más generalmente, el módulo de Pygame. Tenga en cuenta que los dos códigos siguientes son equivalentes y que, en general, es preferible el segundo.
pygame.display.quit()
pygame.quit()
3. La función get_init
get_init() -> bool
La función get_init permite saber si se ha producido la inicialización de Pygame.
Ejemplo
import pygame
print(pygame.display.get_init())
pygame.display.init()
print(pygame.display.get_init())
Obtenemos esto en el terminal:
0
1
4. La función set_mode
set_mode(size=(0, 0), flags=0, depth=0, display=0) -> Surface
Esta es la función encargada de crear la superficie asociada...
El objeto Surface
La superficie en el desarrollo usando Pygame, es un objeto que permite representar imágenes en el sentido más amplio de la palabra: áreas geométricas coloreadas, áreas que albergan archivos de imagen, cuadros de texto o la propia ventana de juego, que también es una superficie.
1. El constructor de Surface
Surface((width, height), flags=0, depth=0, masks=None) -> Surface
Además de la anchura y la altura de la superficie que se va a crear, el resto de argumentos tienen valores predeterminados. De hecho, flags, depth y masks se corresponden con usos muy específicos y raros.
En el siguiente ejemplo se crea una superficie "base" que no está dedicada específicamente a un archivo de imagen, texto u objeto geométrico. Solo especificamos que el ancho es igual a 50 y el alto a 25.
import pygame
pygame.init()
superficie = pygame.Surface((50, 25))
print(superficie)
En el terminal, obtenemos lo siguiente: encontramos las dimensiones 50 y 25, así como los valores predeterminados del resto de argumentos.
<Surface(50x25x32 SW)>
2. La función blit
Esta función es fundamental porque permite posicionar una superficie dentro de otra. Como recordatorio, la ventana del juego es una superficie. Esta función blit permite colocar una superficie en la ventana del juego.
blit(source, dest, area=None, special_flags=0) -> Rect
Aquí mostramos una superficie de color azul en un lugar determinado de la ventana de juego.
import pygame
pygame.init()
pygame.display.set_caption(u'Blit')
ventana = pygame.display.set_mode((400, 400))
superficie = pygame.Surface((50, 25))
azul = (0, 0, 255)
superficie.fill(azul) ...
El módulo draw
El módulo draw es el módulo de Pygame que permite mostrar formas geométricas. Su uso es relativamente intuitivo, las funciones generalmente reciben el nombre (en inglés) de las formas que se desea mostrar.
1. La función rect
rect(superficie, color, rect, width=0)
Para mostrar un rectángulo, pasamos como argumento:
-
el área de visualización,
-
el color del contorno,
-
el par de coordenadas del punto superior izquierdo e inferior derecho del rectángulo,
-
el eventual grosor del contorno.
Ejemplo de uso
ventana = pygame.display.set_mode((400, 400))
rojo = pygame.Color(255,0,0)
pygame.draw.rect(ventana, rojo, ((50, 50), (150, 100)), 1)
2. La función polygon
polygon(superficie, color, puntos, width=0) -> Rect
De acuerdo con el mismo principio que antes, la función polygon permite dibujar un polígono. Comenzamos creando la lista de puntos que forman el polígono.
puntos = [(200, 200), (250, 300), (300, 325), (400, 350)]
Posteriormente, se muestra con un grosor de línea de 1 y un color de línea amarillo.
amarillo = pygame.Color(255,255,0)
pygame.draw.polygon( ventana, amarillo, puntos, 1)
3. La función circle
circle(superficie, color, center, radius, width=0) -> Rect
La función circle permite mostrar un círculo en una superficie determinada. Como argumento definimos su color, las coordenadas de su centro, su radio y el posible...
El módulo image
El módulo image se utiliza para mostrar archivos de tipo image en un juego de Pygame.
1. La función load
load(filename) -> Surface
La función load permite cargar un archivo de imagen desde el disco y mostrarlo como una superficie en la ventana de juego.
Ejemplo
superficieImagen = pygame.image.load("MiImagen.jpg")
Las siguientes extensiones son compatibles con la función load:
-
JPG
-
PNG
-
GIF (no animado)
-
BMP
-
PCX
-
TGA (descomprimido)
-
TIF
-
LBM (y PBM)
-
PBM (y PGM, PPM)
-
XPM
2. La función save
save(Surface, filename) -> None
La función save es la recíproca de la función load. Permite guardar una superficie Pygame en un archivo de imagen en el disco.
Ejemplo de uso desde una superficie denominada IMAGEN
pygame.image.save(IMAGEN, "IMAGEN_ARCHIVO.png")
Las siguientes extensiones son compatibles con la función save:
-
BMP
-
TGA
-
PNG
-
JPEG
3. Las funciones tostring, fromstring, frombuffer
tostring(Surface, format, flipped=False) -> string
fromstring(string, size, format, flipped=False) -> Surface
frombuffer(string, size, format) -> Surface
La función tostring permite crear un búfer de cadena de caracteres que representa la imagen. La función fromstring se utiliza para crear una superficie de tipo imagen a partir de un búfer de cadena de caracteres. La función frombuffer permite crear una superficie de tipo imagen a partir de un buffer....
El módulo font
El módulo font garantiza la gestión del texto en Pygame.
1. La función init
init() -> None
Se supone que no se debe llamar a esta función que inicializa el módulo font. De hecho, la llamada obligatoria pygame.init() se encarga de llamarla. Por lo tanto, la función se llama automáticamente.
2. La función quit
quit() -> None
Se supone que no debe llamar a esta función, que permite salir del módulo font. De hecho, la llamada pygame.quit() se encarga de llamarla. Por lo tanto, la función se llama automáticamente.
3. La función get_init
get_init() -> bool
Esta función, que devuelve un booleano, se utiliza para verificar si el módulo font está inicializado o no.
4. La función get_default_font
get_default_font() -> string
Esta función get_default_font permite saber cuál es el tipo de letra predeterminado.
Ejemplo
import pygame
pygame.init()
print(pygame.font.get_default_font())
Obtenemos esto en el terminal:
freesansbold.ttf
5. La función get_fonts
pygame.font.get_fonts()
Esta función se utiliza para obtener una lista de todas las fuentes de caracteres disponibles en la máquina donde se ejecuta el programa.
Ejemplo
import pygame
pygame.init()
print(pygame.font.get_fonts())
Posteriormente, obtenemos algo comparable a esto en el terminal:
['bigcaslonttf'...
El módulo mouse
El módulo mouse permite gestionar las distintas interacciones relacionadas con el ratón y así trabajar con este dispositivo en Pygame.
1. La función get_pressed
get_pressed() -> (button1, button2, button3)
Esta función devuelve una matriz de booleanos que indica el estado de cada botón del ratón. Si el valor es True, se pulsa el botón del ratón correspondiente.
Esta función rara vez se utiliza. Es preferible realizar un análisis de los eventos de la cola de eventos, como se explicó en el capítulo Diseño y grafismo en todos sus estados con Pygame.
En el siguiente ejemplo se utiliza get_pressed.
import pygame
pygame.display.init()
print(pygame.mouse.get_pressed())
El resultado en el terminal es el siguiente:
(0, 0, 0)
2. La función get_pos
get_pos() -> (x, y)
La función get_pos se utiliza para obtener las coordenadas actuales del cursor del ratón.
Ejemplo
import pygame
pygame.display.init()
ventana = pygame.display.set_mode((400, 400))
while True:
print(pygame.mouse.get_pos())
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
A continuación, se muestra una de las líneas que aparece en el terminal:
(224, 351)
3. La función get_rel
get_rel() -> (x, y)
Esta función...
El módulo ley
El módulo key permite administrar las interacciones con el teclado del ordenador.
1. Las constantes correspondientes a las teclas del teclado
Cada tecla tiene su código Pygame que permite verificarla en la cola de eventos en particular.
Aquí está la lista casi exhaustiva de estas constantes de Pygame:
K_BACKSPACE \b backspace
K_TAB \t tab
K_CLEAR clear
K_RETURN \r return
K_PAUSE pause
K_ESCAPE ^[ escape
K_SPACE space
K_EXCLAIM ! exclaim
K_QUOTEDBL " quotedbl
K_HASH # hash
K_DOLLAR $ dollar
K_AMPERSAND & ampersand
K_QUOTE quote
K_LEFTPAREN ( left parenthesis
K_RIGHTPAREN ) right parenthesis
K_ASTERISK * asterisk
K_PLUS + plus sign
K_COMMA , comma
K_MINUS - minus sign
K_PERIOD . period
K_SLASH / forward slash
K_0 0 0 ...
El módulo transform
El módulo transform permite crear superficies Pygame nuevas aplicando a una superficie original una o más transformaciones, isométricas o no.
1. La función flip
flip(Surface, xbool, ybool) -> Surface
La función flip permite la simetría axial, vertical u horizontal o ambas. Recibe como argumento la superficie que vamos a transformar, un booleano que indica que procedemos a una simetría según el eje vertical y un booleano que indica que procedemos a una simetría a lo largo del eje horizontal. Si los dos booleanos son True, entonces procedemos a ambas simetrías.
2. La función scale
scale(Surface, (width, height), DestSurface = None) -> Surface
La función scale permite redimensionar una superficie. La altura y la anchura de la superficie objetivo se pasan como argumento.
3. La función rotate
rotate(Surface, angle) -> Surface
La función rotate permite rotar la superficie. El ángulo que se pasa como argumento se expresa en sentido hacia la izquierda, en grados y no en radianes, como es el caso con otras funciones de Pygame (el dibujo de arcos de elipse en particular).
4. La función rotozoom
rotozoom(Surface, angle, scale) -> Surface
scale2x(Surface, DestSurface = None) -> Surface
La función rotozoom permite combinar rotación y homotecia. Esto puede ser particularmente útil para simular el lanzamiento...
El módulo mixer
El módulo mixer permite administrar el sonido en un juego de Pygame, ya sea el aspecto de sonido de fondo o los efectos de sonido.
1. La función init
init(frequency=22050, size=-16, channels=2, buffer=4096, devicename=None,
allowedchanges=AUDIO_ALLOW_FREQUENCY_CHANGE | AUDIO_ALLOW_CHANNELS_CHANGE) -> None
La función init se utiliza para inicializar el módulo mixer. Es necesaria para poder utilizar el módulo.
pygame.mixer.init()
2. La función quit
quit() -> None
Esta función termina con el uso del módulo mixer. Si se están reproduciendo sonidos cuando se llama a la función, estos se interrumpen.
pygame.mixer.quit()
3. La función get_init
get_init() -> (frequency, format, channels)
La función get_init permite saber si el módulo está correctamente inicializado. Si es así, la función devuelve una cierta cantidad de información. De lo contrario, devuelve None.
import pygame
pygame.init()
pygame.mixer.init()
print(pygame.mixer.get_init())
Posteriormente, obtenemos esto en el terminal:
(22050, -16, 2)
4. El objeto Sound
El objeto Sound se utiliza para crear un objeto sonido.
a. Los constructores de Sound
Sound(filename) -> Sound
Sound(file=filename) -> Sound
Sound(buffer) -> Sound
Sound(buffer=buffer) -> Sound
Sound(object) -> Sound
Sound(file=object) -> Sound
Sound(array=object) -> Sound
Los constructores disponibles permiten crear...
El módulo music
Este módulo mixer.music se utiliza para "transmitir" el sonido de fondo y, de manera más general, para administrar el fondo de sonido. Por lo tanto, la clase Sound del módulo mixer se usa más bien para efectos de sonido, mientras que el módulo music está más bien dedicado al fondo de sonido.
1. La función load
load(filename) -> None
La función load permite cargar un archivo de sonido para reproducirlo como fondo de sonido.
2. La función unload
unload() -> None
La función unload se utiliza para descargar el archivo de sonido actual que se había cargado previamente.
3. La función play
play(loops=0, start=0.0) -> None
La función play permite reproducir el archivo de sonido previamente cargado. Podemos indicar cuántas veces queremos leerlo en bucle. Además, es posible no empezar desde el principio del archivo, sino indicar una posición en el archivo desde la que se inicia la reproducción.
En el siguiente ejemplo, el archivo se lee cinco veces seguidas.
import pygame
pygame.init()
pygame.mixer.init()
fondo = pygame.mixer.music.load("gallo.ogg")
pygame.mixer.music.play(5, 0.0)
while True:
event = pygame.event.wait()
if event.type == pygame.QUIT:
break
pygame.quit()
4. La función rewind
rewind()...
El módulo sprite
El módulo sprite permite administrar el uso de los sprites en un programa Pygame. Esta noción se discute ampliamente en los capítulos Sprites con Pygame y Llegar más lejos con el módulo Sprite, ejemplos aplicados.
Este módulo incluye varias clases, especialmente las clases Sprite y Group, que es un objeto que puede mantener una colección de objetos sprite.
1. La clase Sprite
a. La función update
update(*args) -> None
Una vez creada la instancia de Sprite (normalmente una instancia de una clase heredada de la clase Sprite), la función update permite actualizar automáticamente las características del sprite actual.
b. La función add
add(*groups) -> None
La función add permite agregar la instancia actual de Sprite a uno o más grupos.
c. La función remove
remove(*groups) -> None
La función remove permite eliminar la instancia actual de Sprite de uno o más grupos.
d. La función kill
kill() -> None
La función kill solo es un destructor. Su llamada permite destruir la instancia actual de Sprite.
e. La función alive
alive() -> bool
La función alive devuelve True si la instancia actual de Sprite pertenece al menos a un grupo.
f. La función groups
groups() -> group_list
La función groups se utiliza para obtener una lista con todos los grupos a los que pertenece la instancia actual...