sprites colisiones python pygame collision-detection

python - colisiones sprites pygame



Pygame colisiĆ³n detectar con objeto y rect (2)

Sí, haré otra pregunta sobre este programa: D

De todos modos, actualmente soy un programa que crea dos líneas en la pantalla con un espacio entre ellas que puede desplazarse. Desde aquí, obviamente necesito ver si los dos objetos están colisionando. Como solo tengo un sprite y un rectángulo, pensé que era un poco inútil y excesivo hacer dos clases para ellos. Sin embargo, solo puedo encontrar tutoriales relacionados con las clases que obviamente no necesito. Entonces, mi pregunta realmente es: ¿es posible probar la colisión entre una imagen estándar y un Pygame rect ? Si no es así, ¿cómo puedo convertir la imagen, el rectángulo o ambos los sprites para hacer esto? (Todos preferiblemente sin usar clases).

Nota: la imagen y el rectángulo se crean de las siguientes maneras (si hace una diferencia)

bird = pygame.image.load("bird.png").convert_alpha() pipeTop = pygame.draw.rect(screen, (0,200,30), Rect((scrollx,0),(30,height))) pipeBottom = pygame.draw.rect(screen, (0,200,30), Rect((scrollx,900),(30,-bheight)))


Una imagen en sí misma no tiene una posición. No puede probar la colisión entre un rect y algo que no está colocado en el mundo. Yo recomendaría crear una clase Bird junto con una clase Pipe que será la subclase pygame.Sprite.

Pygame ya tiene detección de colisión incorporada.

Un pequeño ejemplo

bird = Bird() pipes = pygame.Group() pipes.add(pipeTop) pipes.add(pipeBottom) while True: if pygame.sprite.spritecollide(bird,pipes): print "Game Over"

EDITAR:

No tengas miedo de las clases, tendrás que usarlas de todos modos tarde o temprano. Si realmente no desea usar sprites, puede usar las aves rect y pipe y llamar a collide_rect para verificar si se superponen.

EDIT2:

un ejemplo de clase Bird modificada de documentos de pygame

class Bird(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load("bird.png").convert_alpha() # Fetch the rectangle object that has the dimensions of the image # Update the position of this object by setting the values of rect.x and rect.y self.rect = self.image.get_rect()

A continuación, puede agregar métodos como movimiento, que moverán al pájaro hacia abajo con la fuerza de la gravedad.

Lo mismo se aplicaría a Pipe pero en lugar de cargar una imagen, puede crear una Surface vacía y llenarla con un color.

image = pygame.Surface(width,height) image.fill((0,200,30)


Puedes obtener los valores x e y y compararlos:

if pipe.x < bird.x < pipe.x+pipe.width: #collision code pass