Debido a una operación de mantenimiento, el acceso al sitio web de Ediciones ENI estará interrumpido a primera hora del martes 10 de diciembre. Le invitamos a anticipar sus compras. Lamentamos las molestias ocasionadas.
Debido a una operación de mantenimiento, el acceso al sitio web de Ediciones ENI estará interrumpido a primera hora del martes 10 de diciembre. Le invitamos a anticipar sus compras. Lamentamos las molestias ocasionadas.
  1. Libros
  2. Pygame
  3. Módulos secundarios de Pygame
Extrait - Pygame Iníciese en el desarrollo de videojuegos en Python
Extractos del libro
Pygame Iníciese en el desarrollo de videojuegos en Python Volver a la página de compra del libro

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...