
Crear colisiones con Pygame
Capítulo 12: Creando colisiones de sprites
En este capítulo vamos a añadir colisiones al juego.
Lo primero es tener claro qué queremos hacer:
Yo lo que quiero hacer es que cuando mi nave colisione con cualquier enemigo, se destruya (la nave enemiga y no la mía), y que cuando haya dicha colisión, esta se transforme en una bola de fuego y caiga hacia abajo desapareciendo por la parte inferior de la pantalla.
Para llevar esto a cabo, hay que crear un grupo de sprites para los enemigos.
Esta vez es un requisito y no una opción si queremos utilizar un método muy útil de Pygame para las colisiones de sprites, ya que hasta ahora utilizábamos un mismo grupo para todos los sprites.
enemigos = pygame.sprite.Group()
Puesto que has creado un nuevo grupo, tienes que crear su update
.
enemigos.update()
Además del draw
.
enemigos.draw(pantalla)
Todo esto ya vimos donde se colocaba, pero si no te acuerdas, en el vídeo de arriba aparece.
Una vez hecho todo esto es el momento de añadir una variable para la colisión.
colision = pygame.sprite.spritecollide(jugador, enemigos, False)
Con esto, estamos diciendo que el sprite jugador
, pueda colisionar con el grupo de sprites enemigos
, es decir, cualquier enemigo que instanciemos.
Finalmente, con el False
indicamos que no elimine el sprite del enemigo al colisionar, ya que quiero que el enemigo siga en el juego, pero esta vez como bola de fuego.

Ahora podemos añadir por ejemplo un if
que haga que ocurra algo en el caso de que se produzca una colisión.
if colision:
enemigo.image = pygame.image.load("principal/explosion.png")
enemigo.velocidad_y += 20
elif enemigo.rect.top > ALTO:
enemigo.kill()
Lo que conseguimos en este if
- elif
es indicar que cuando se produzca la colisión, se cambie la imagen del enemigo por la de una bola de fuego y que esta descienda a la parte baja de la pantalla.
Una vez desaparece de la pantalla la eliminamos con el kill()
y evitamos que pueda volver a subir y que se sobrecargue el juego de objetos innecesarios.
Comentarios
Si te quedan dudas sobre el temario, sobre Python, Pygame o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.