Módulos secundarios de Pygame
Introducción
Este capítulo explica los módulos de Pygame menos utilizados, que se pueden considerar como secundarios. Sin embargo, es posible que sus desarrollos de videojuegos hagan que tenga que manipularlos. Este capítulo servirá como una documentación muy detallada.
Los módulos u objetos detallados aquí son:
1. cursors
2. joystick
3. touch
4. math
5. surfarray
6. camera
Al igual que en el capítulo anterior, se utiliza la siguiente notación. Esto 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 Ejemplo 2 que recibe los argumentos i, j y k devuelve un objeto de tipo Color:
Ejemplo2( i, j, k) -> Color
El módulo cursors
El módulo cursors permite administrar el cursor. Un cursor es el marcador gráfico que se muestra en la pantalla y se corresponde con la "ubicación" actual del ratón. Vimos en el capítulo Principales módulos de Pygame cómo el módulo mouse permite controlar la posición del cursor, pero es el módulo cursors el que permite elegir la apariencia del cursor, que puede ser una representación diferente a la predeterminada.
Las diferentes representaciones del cursor se almacenan en un formato gráfico de mapa de bits (bitmap) que el módulo puede cargar. Una vez definida la apariencia de un cursor, se puede utilizar desde el módulo mouse. Para fijar esta nueva apariencia de cursor, usamos la función set_cursor del módulo mouse, de la siguiente manera:
pygame.mouse.set_cursor(*pygame.cursors.arrow)
También debe tener en cuenta que el módulo define varios cursores y se pueden utilizar inmediatamente desde el principio.
Por último, tenga en cuenta que Pygame sólo permite una apariencia de cursor en blanco y negro (monocromo).
1. Los cursores predefinidos del módulo
Los siguientes cursores están disponibles y se pueden utilizar inmediatamente. Es decir, se pueden usar desde el primer momento con set_cursor del módulo mouse.
pygame.cursors.arrow
pygame.cursors.diamond ...
El módulo joystick
El módulo joystick se utiliza para administrar los periféricos de juego de tipo joystick, incluso cuando incluyen bolas de control y diferentes controles. Todos los ejemplos del libro implican el uso del teclado y el ratón. Aquí vamos a ver cómo puede manejar un joystick con Pygame.
Este módulo incluye un objeto Joystick cuya instancia se corresponde con un joystick determinado. Comenzamos estudiando las funciones del módulo antes de estudiar este objeto Joystick.
1. La función init
init() -> None
La función init se utiliza para inicializar el módulo. Como sucede a menudo, la función de inicialización de Pygame pygame.init() la llama automáticamente.
2. La función quit
quit() -> None
La función quit es la función recíproca de la función init. Se utiliza para indicar que se deja de usar el módulo joystick.
3. La función get_init
get_init() -> bool
La función get_init se utiliza para saber si se ha llamado realmente o no a la función init del módulo. Devuelve un booleano y, por lo tanto, el valor True si se ha llamado a la función.
4. La función get_count
get_count() -> count
La función get_count permite obtener el número de joysticks conectados al puesto informático actual, en cualquier caso los periféricos reconocidos como tales. Para...
El módulo touch
Este módulo requiere SDL2 de manera obligatoria y se utiliza para gestionar dispositivos táctiles.
1. La función get_num_devices
get_num_devices() -> int
Esta función permite obtener el número de periféricos táctiles realmente disponibles.
2. La función get_device
get_device(index) -> touchid
Esta función permite obtener el identificador de un periférico táctil pasando como argumento el index de este periférico en la colección. Por lo tanto, el index debe ser al menos 0 y menor que el número de periféricos táctiles.
3. La función get_num_fingers
get_num_fingers(touchid) -> int
La función get_num_fingers permite obtener el número de dedos activos en un periférico táctil determinado.
4. La función get_finger
get_finger(touchid, index) -> dict
La función get_finger recibe como argumento el touchid de uno de los periféricos táctiles y el index de uno de los dedos activos en este periférico. A cambio, obtenemos un diccionario que incluye los siguientes valores:
-
el identificador id del dedo,
-
la coordenada x de la posición del dedo,
-
la coordenada y de la posición del dedo,
-
la presión de la pulsación del dedo.
El módulo math
Este módulo permite hacer cálculo vectorial dentro de Pygame. Permite la definición de vectores en dos o tres dimensiones. A continuación, se pueden aplicar varias operaciones a estos vectores.
Hay dos clases en este módulo: Vector2 (vector en dos dimensiones) y Vector3 (vector en tres dimensiones).
1. La clase Vector2 - Creación de vector
Vector2() -> Vector2
Vector2(int) -> Vector2
Vector2(float) -> Vector2
Vector2(Vector2) -> Vector2
Vector2(x, y) -> Vector2
Vector2((x, y)) -> Vector2
Los prototipos anteriores crean un vector en dos dimensiones.
Aquí hay un pequeño ejemplo:
vec = pygame.math.Vector2(150,180)
print(vec.x)
print(vec.y)
2. La clase Vector3 - Creación de vector
Vector3() -> Vector3
Vector3(int) -> Vector3
Vector3(float) -> Vector3
Vector3(Vector3) -> Vector3
Vector3(x, y, z) -> Vector3
Vector3((x, y, z)) -> Vector3
Los prototipos anteriores permiten crear un vector en tres dimensiones.
Ejemplo
vec = pygame.math.Vector3(150,180, 210)
print(vec.x)
print(vec.y)
print(vec.z)
3. Las principales funciones de Vector2 y Vector3
Todas las funciones de Vector2 tienen sus equivalentes en Vector3. Por lo tanto, detallaremos las funciones principales de Vector2, sabiendo que las funciones correspondientes...
El módulo surfarray
Algunas veces, puede ser interesante guardar las superficies Pygame o, al menos, almacenarlas en forma de tablas. Es la función del módulo surfarray, que permite la conversión de una superficie en una tabla de píxeles.
1. La función array2d
array2d(Surface) -> array
Esta función array2d permite convertir una superficie de Pygame en una tabla de píxeles.
Ejemplo
superficie = pygame.image.load("imagen.png").convert()
tabla = pygame.surfarray.array2d(superficie)
2. La función pixels_red
pixels_red (Surface) -> array
Esta función crea una tabla que hace referencia a todos los valores de píxeles rojos (RGB) de una superficie.
3. La función pixels_green
pixels_green (Surface) -> array
Esta función crea una matriz que hace referencia a todos los valores de píxeles verdes (RGB) de una superficie.
4. La función pixels_blue
pixels_blue (Surface) -matriz >
Esta función crea una matriz que hace referencia a todos los valores de píxeles azules (RGB) de una superficie.
5. La función make_surface
make_surface(matriz) -> Surface
La función make_surface permite crear una superficie Pygame a partir de una tabla de píxeles tal y como se creó, por ejemplo, con la función array2d.
6. La función blit_array
blit_array(Surface, array) -> None
La función blit_array recibe como argumento...
El módulo camera
Este módulo experimental permite la captura de vídeo. La captura de video se refiere a la capacidad de guardar cada imagen del desarrollo de una partida del juego, generar un video o incluso un flujo de video, por ejemplo, para hacer streaming. Por lo tanto, el juego actual se puede ver en tiempo real.
El módulo camera es experimental en el sentido de que no hay garantía de que este módulo sea compatible con futuras versiones de Pygame. Además, actualmente está restringido a entornos que utilizan API muy específicas de captura de vídeo (en particular Video4Linux).
Antes de detallar el contenido del módulo, aquí hay un ejemplo muy sencillo de una captura de video realizada en una ventana de juego (en la que no sucede nada especial). El propósito es generar un video llamado output.avi.
import pygame, sys, os
import pygame.camera
pygame.init()
pygame.camera.init()
PANTALLA = pygame.display.set_mode((400, 400))
cam = pygame.camera.Camera("/dev/video0", (400, 400))
cam.start()
NUM = 0
CAPTURA = False
while not CAPTURA:
NUM = NUM + 1
image = cam.get_image()
screen.blit(image, (0,0))
pygame.display.update()
NOM_ARCHIVO = "FOTOS/%04d.png" % NUM
pygame.image.save(image...