Módulo de pygame con clases básicas de objetos para juegos.
Este módulo contiene varias clases simples para ser utilizadas
dentro de los juegos. Hay una clase principal Sprite
y varias
clases Group
que contienen sprites. El uso de estas clases es
completamente opcional cuando se usa pygame. Las clases son
bastante livianas y solo proveen un punto de partida para el código
que es común en la mayoría de los juegos.
Se espera que la clase Sprite
se utilice como clase base para
los diferentes tipos de objetos en el juego. También hay una clase Group
básica que simplemente almacena sprites. Un juego podría crear nuevos
tipos de clases Group
que operen sobre instancias de objetos Sprite
personalizadas.
La clase Sprite
básica puede dibujar los sprites que contiene
sobre una superficie. El método Group.draw()
requiere que cada
que cada Sprite
tenga los atributos image
y rect
. El
método Group.clear()
requiere estos mismos atributos para
poder borrar todos los sprites con fondo de pantalla. También hay
grupos mas avanzados, por ejemplo pygame.sprite.RenderUpdates()
y pygame.sprite.OrderedUpdates()
.
Por último, este módulo contiene varias funciones de colisión. Estas ayudan a encontrar sprites que tienen rectángulos de colisión en contacto.
Los grupos están diseñados para ser muy eficientes al insertar y eliminar
sprites de ellos. También permiten pruebas sencillas para ver
si un sprite está dentro del grupo. Un determinado Sprite
puede
estar en cualquier número de grupos. Un juego podría usar algunos
grupos para controlar la impresión de objetos, y un conjunto separado
de grupos para controlar la interacción o el movimiento del
personaje. Considere mantener los sprites dentro de grupos
organizados en lugar de agregar atributos de tipo a los objetos sprite. Esto
le ayudará a encontrarlos mas fácilmente en el juego.
Los sprites y los grupos manejan sus relaciones con los métodos add()
y remove()
'. Estos métodos pueden aceptar una o varias instancias
de objetos. Los inicializadores para estas clases también aceptan
uno o varios objetos para insertar. Es seguro agregar y eliminar
el mismo Sprite
de un grupo.
Mientras es posible diseñar clases de sprite y grupos que no
deriven desde las clases Sprite
y AbstractGroup
de mas
arriba, es extremadamente que herede de ellas cuando agregue
una clase de grupo o sprite.
Los sprites no son seguros para operar desde diferentes hilos, por lo tanto debe bloquearlos usted mismo si está usando hilos.
Encuentra sprites en el grupo que están en contacto con otro sprite.
pygame.sprite.spritecollide(sprite, group, dokill, collided = None): return Sprite_list
Retorna una lista que contiene todos los sprites en un grupo que están
colisionando con otro sprite. La intersección se determina comparando
el atributo Sprite.rect
de cada sprite.
El argumento dokill
es un valor booleando. Si vale True
todos
los sprites que colisionan se eliminarán del grupo.
El argumento collided
es una función que se utiliza para calcular
si dos sprites están en contacto, esta función debería tomar dos
sprites como agumentos y retornar un valor True
o False
indicado
si están colisionando. Si no se especifica el valor para el
argumento, todos los sprites deberán tener un valor rect
, que es
el rectángulo del área de sprite, que se usará para calcular l
colisión.
Funciones de colisión:
Detección de colisión entre dos sprites, usando rectángulos.
pygame.sprite.collide_rect(left, right): return bool
Consulta la colisión entre dos sprites. Usa la función
colliderect
del módulo rect
para calcular la
colisión. Está diseñada para ser enviada como una
función de colisión a las funciones generales de colisión.
Los sprites deben tener atributos rect
.
Esta función es nueva en pygame 1.8.0
Detección de colisión entre dos sprites, usando rectángulos reducidos.
pygame.sprite.collide_rect_ratio(ratio): return collided_callable
Verifica colisiones entre dos sprites usando usa versión reducida de los rectángulos de sprite.
Se generan con un radio, y la instancia retornada está diseñada para ser enviada como una función de colisión a las funciones generales de colisión.
El argumento ratio
es un número real, 1.0 indica que será
del mismo tamaño, 2.0 es el doble de grande y 0.5 es de la mitad
de tamaño.
Esta función es nueva en pygame 1.8.1
Detección de colisión entre dos sprites, usando círculos.
pygame.sprite.collide_circle(left, right): return bool
Verifica la colisión entre dos sprites, verificando
si dos círculos centrados en los sprites están en
contacto. Si el sprite tiene un atributo radius
este
se usará para crear en círculo, en caso de que no exista
se creará un círculo lo suficientemente grande para
contener todo el rectángulo del sprite indicado
por el atributo rect
. Esta función está diseñada
para ser enviada como función de colisión a las
funciones generales de colisión. Los sprites deben
tener los atributos rect
y radius
(este último
es opcional).
Esta función es nueva en pygame 1.8.1
Detección de colisión entre dos sprites, usando una versión reducida del círculo.
pygame.sprite.collide_circle_ratio(ratio): return collided_callable
Verifica colisiones entre dos sprites usando usa versión reducida de los círculos de sprite.
Se generan con un radio, y la instancia retornada está diseñada para ser enviada como una función de colisión a las funciones generales de colisión.
El argumento ratio
es un número real, 1.0 indica que será
del mismo tamaño, 2.0 es el doble de grande y 0.5 es de la mitad
de tamaño.
El objeto creado verifica la existencia de colisión entre dos sprites,
comprobando si los dos círculos con centro en los sprites están
en contacto luego de haberlos alterado de tamaño. Lo los sprites
tienen un atributo radius
este se usará para crear el círculo, en
otro caso se creará un círculo lo suficientemente grande grande para
contener por completo el rectángulo de sprite según su atributo
rect
. Está diseñada
para ser enviada como función de colisión a las
funciones generales de colisión. Los sprites deben
tener los atributos rect
y radius
(este último
es opcional).
Esta función es nueva en pygame 1.8.1
Detección de colisión entre dos sprites usando máscaras.
pygame.sprite.collide_mask(SpriteLeft, SpriteRight): return bool
Verifica la colisión entre dos sprites, probando si sus
máscaras de bits se superponen. Si el sprite tiene un
atributo mask
, este atributo se usará como máscara, en
otro caso se creará la máscara a partir de la imagen
del sprite. Esta función está diseñada para ser
enviada como función de colisión a las funciones generales
de colisión. Los sprites deben tener un atributo rect
y
un atributo opcional de nombre mask
.
Esta función es nueva en pygame 1.8.0
Encuentra todos los sprites que colisionan entre dos grupos.
pygame.sprite.groupcollide(group1, group2, dokill1, dokill2): return Sprite_dict
Esta función encontrará intersecciones entre todos los sprites de
dos grupos. Las intersecciones se determinan comparando los atributos
Sprite.rect
de cada Sprite
.
Cada sprite dentro del grupo group1
se agrega al diccionario de
retorno como clave. El valor de cada elemento será una lista de los
sprites del grupo group2
que colisionan con el primero.
Si algunos de los argumentos dokill
vale True
, se eliminaran
los sprites en colisión de sus respectivos grupos.
Consulta simple para ver si un sprite colisiona con algún otro en el grupo.
pygame.sprite.spritecollideany(sprite, group): return bool
Consulta si el sprite dado colisiona con algún sprite en el grupo. La
intersección se determina comparando el atributo Sprite.rect
de cada
sprite.
Esta prueba de colisión puede ser mas rápida que pygame.sprite.spritecollideany()
dado que tiene menos trabajo para hacer. Retornará
al encontrar la primer colisión.