InicioLinuxColisión de Objetos en Pygame
Colisión de Objetos en Pygame


Colisión de Objetos en Pygame


Hola a todos en esta ocasión les traigo la explicación de como detectar colisiones entre objetos, en pygame para facilitar las cosas he tomado el código de mi anterior ejemplo y lo he modificado para que dos pelotas choquen entre sí.

Codigo

[color=#000000]

class pelota( pygame.sprite.Sprite, pygame.font.Font):
    
    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

    def velocidad(self,x,x1,y1,nombre1)

        self.image=cargar_img(str(nombre1))
        self.rect = self.image.get_rect()
        self.rect.center = (x1,y1)
        self.velosidad=[x,0]

    def update(self):

        self.rect.move_ip((self.velocidad[0], self.velocidad[1]))
        self.control()

    def control(self):

        if self.rect.left <=57 or self.rect.right>=542:
            
            self.velocidad[0]=-self.velocidad[0]

        if self.rect.top <=28 or self.rect.bottom>=435:

            self.velocidad[1]=-self.velocidad[1]

[/color]


Bueno lo primero que hice fue modificar la clase pelota y agregue la función velosidad, donde le pido los parámetros de velosidad en x, la posición del objeto x,y y por ultimo le nombre de la imagen.

Codigo

[color=#000000]
def colision(sprite,grupo):
    
    for COLISION in pygame.sprite.spritecollide(sprite,grupo,0):
        pelota0.velocidad[0]=-pelota0.velocidad[0]
        pelota1.velocidad[0]=-pelota1.velocidad[0]
[/color]


Luego creo la función colisión, donde creo un ciclo que si COLISION en la función pygame.sprite.spritecollide(sprite,grupo,0), es verdadero, la velocidad de pelota0 y pelota1 tome su mismo valor de forma negativa.

La Función pygame.sprite.spritecollide(sprite,grupo,0), lo que hace es mirar si los dos objetos chocha pero sus rectángulos, por eso la importancia de la función self.rect = self.image.get_rect(), y nos dé vuelve un valor Booleano True o False.

Existe varias formas de usar esta función podemos decir pelota2.rect.colliderect(pelota3.rect), en este ejemplo decimos que el rectángulo del Sprite llamado pelota2 choca con el rectángulo de el Sprite pelota3 y nos devuelve un valor True o False, si es True nos indica que el choque se dio.


Codigo

[color=#000000]
pelotas=pygame.sprite.RenderClear()
screen=pygame.display.set_mode((ancho,alto))
pelota0=pelota()
pelota1=pelota()
pelota0.velocidad(5,70,200,"pelota.png")
pelota1.velocidad(5,500,200,"pelota-1.png")
pelotas.add(pelota1)
[/color]


Luego le decimos a la variable pelotas que tome el valor de la función pygame.sprite.RenderClear(), esta función nos permite agrupar los sprite de manera tal que los podemos borrar los sprite, por ultimo enviamos la información necesaria por cada una de nuestra pelotas, y al final agregamos unos de nuestros sprite al grupo pelotas usando pelotas.add(pelota1).

colision(pelota0,pelotas)

Por último llamamos la función colisión y le enviamos el sprite y el grupo de objetos que deseamos saber si colisionan, como se puede entender gracias a esta función podemos agregar mas de un objeto


Realizado por

Mikey

Comunidad




Bueno a qui esta el archivo con todos los elementos del juego las imágenes y el sonido, apenas termine el manual lo publicare para que se entienda de una manera mejor el código, dentro de la comunidad esta el enlace para descargar el código
Datos archivados del Taringa! original
37puntos
1,289visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
1visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

m
mikey8668🇦🇷
Usuario
Puntos0
Posts171
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.