es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo verificar la colisión entre dos sprites en el mismo pygame.sprite.Group()?

He estado intentando crear un sistema de movimiento de enemigos para mi juego de pygame 2D desde arriba. Pero mis dos enemigos siempre acaban superponiéndose. Por eso decidí crear un método que evite que los enemigos se superpongan unos a otros, pero no sé cómo comprobar una colisión entre un enemigo en el grupo y el resto del grupo, porque cuando lo hago, el enemigo siempre piensa que ha colisionado con otro enemigo, pero en realidad ha colisionado consigo mismo. ¿Hay alguna manera fácil de solucionar esto?
Ver el comentario en el código a continuación para obtener más explicación

enemies = self.enemies.sprites()
for enemy in enemies:
    if pygame.sprite.spritecollide(enemy,self.enemies,False,pygame.sprite.collide_mask): # Esta es la parte que me gustaría cambiar porque el enemigo siempre está diciendo que está colisionando consigo mismo, pero quiero que verifique si está en colisión con los demás enemigos, no consigo mismo, aunque sea parte de ese grupo
        print('colisión')
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución a tu problema podría ser excluir al enemigo actual del grupo de sprites antes de verificar las colisiones con el resto de los enemigos. Aquí tienes una versión actualizada de tu código para lograr esto:

    enemies = self.enemies.sprites()
    for i, enemy in enumerate(enemies):
        # Eliminar al enemigo actual del grupo y verificar colisiones con el resto de los enemigos
        enemies_copy = enemies[:i] + enemies[i+1:]
        if pygame.sprite.spritecollide(enemy, enemies_copy, False, pygame.sprite.collide_mask):
            print('colisión')
    

    En este código actualizado, recorremos cada enemigo y creamos una copia de la lista enemies sin el enemigo actual (enemies_copy). Luego verificamos las colisiones entre el enemigo actual y la lista enemies_copy, lo que efectivamente verifica las colisiones con el resto de los enemigos del grupo de sprites.

    Esto debería resolver el problema de los enemigos detectando colisiones consigo mismos y permitirte implementar el método deseado para evitar superposiciones de enemigos en tu juego.

Comments are closed.