Ya hemos visto como colisionar dos objetos/cuadrados en nuestro artículo: colisión entre dos cuadrados.
Ahora vamos a colisionar un objeto con una lista de objetos, y del producto de la colisión desaparecerá uno de ellos.
Para empezar definimos los dos objetos:
import pygame, sys, random
pygame.init()
class Girl(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/girl.png").convert_alpha()
self.rect=self.image.get_rect()
class Pera(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/pera2.png").convert_alpha()
self.rect=self.image.get_rect()
Asignamos valores a las variables y definimos la ventana
ancho=800
alto=700
x=50
y=490
vel=0
salto=10
isJump=False
#Ventana y título
ventana = pygame.display.set_mode((ancho,alto))
pygame.display.set_caption('Saltando')
clock=pygame.time.Clock()
Cargamos el objeto Girl en la lista y guardamos el fondo en una variable.
#------------Listas--------------
frutaLista=pygame.sprite.Group()
fondo =pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/fondonubes.png").convert()
girl=Girl()
Mediante un bucle damos valores de x e y al objeto Pera que guardamos en una lista «frutaLista»
h=100
for i in range(3):
pera=Pera()
pera.rect.x=h
pera.rect.y=300
frutaLista.add(pera)
h+=250
Ahora cargamos los sonidos de fondo y colisión.
soundColision = pygame.mixer.Sound("E:/NUEVO 2020/PYTHON/pygame/sonidoPG/tesoro.wav")
soundBg = pygame.mixer.music.load("E:/NUEVO 2020/PYTHON/pygame/main.mid")
pygame.mixer.music.play()
Damos movilidad a los objetos definiendo eventos de teclado
#/////////////////Bucle del juego/////////////////
gameOver=False
while not gameOver:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameOver=True
#----------- pulsar teclas y soltar tecla
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
vel=-7
if event.key == pygame.K_RIGHT:
vel=7
#Si no está en salto /////////////////
if event.key==pygame.K_SPACE:
isJump=True
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
vel=0
if event.key == pygame.K_RIGHT:
vel=0
if isJump:
if salto>=-10:
y-=(salto*abs(salto))*0.5
salto-=1
else:
salto=10
isJump=False
Damos valores x e y al objeto girl, llamando a la clase con los parámetros definidos con el teclado.
#------------ LOGICA -------------------
x += vel
girl.rect.x=x
girl.rect.y=y
Para colisionar el objeto girl con la lista frutaLista utilizamod un spritecollide que borra el objeto de la lista si lo marcamos como True.
Cuando colisiona reproducimos el sonido.
#----------- COLISION --------------------
if pygame.sprite.spritecollide(girl, frutaLista, True):
soundColision.play()
Ahora dibujamos el fondo, la lista y el objeto.
#-------------FONDO---------------------
ventana.blit(fondo, [0,0])
#------------ DIBUJO ------------------
frutaLista.draw(ventana)
ventana.blit(girl.image, [x,y])
pygame.display.flip()
clock.tick(18)
pygame.quit()
Puedes ver todo el código en el vídeo.
Juande Marín
Profesor de Marketing digital, divulgador de inteligencia artificial y neuroeducación. Especializado en posicionamiento en buscadores y diseño web. Autor de varios libros relacionados con el comercio electrónico y el marketing digital (McGraw Hill, Paraninfo,…) Juande2marin