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 puedo obtener el rectángulo de un grupo de sprites?

Tengo un spritegroup. Cuando un miembro del spritegroup tiene una colisión, quiero conocer la posición del rectángulo. Aquí tengo el mensaje de error ‘Group’ object has no attribute ‘x’

class Landschaft(pygame.sprite.Sprite):       
    def __init__(self, imagen):
        pygame.sprite.Sprite.__init__(self) 
        self.imagen = imagen       
        self.rect = self.imagen.get_rect()            
        self.rect.x = random.randrange(60, ancho -60)
        self.rect.y = random.randrange(100, alto - 200) 
        self.rect.center = (self.rect.x, self.rect.y)

land = pygame.sprite.Group()

for i in range(5):
      imagen = gegend[i]     
      m = Landschaft(imagen)        
      hits = pygame.sprite.spritecollide(m,land,True)

      if hits:
          i-=1
          print(m.rect.x) 

      land.add(m)
Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error ‘Objeto “Group” no tiene el atributo ‘x” significa que estás intentando acceder al atributo ‘x’ desde el grupo de sprites en lugar de hacerlo desde un sprite en particular. Cuando ocurre una colisión, el sprite que colisiona se pasa como argumento al método spritecollide(), así que debes acceder al atributo ‘x’ desde el sprite en particular en lugar de hacerlo desde el grupo de sprites.

    Para obtener la posición del rectángulo del sprite que colisionó, puedes acceder a su atributo rect usando el nombre del sprite, que en este caso es ‘m’. Reemplaza la línea print(land.rect.x) por print(m.rect.x) para imprimir la coordenada x del rectángulo del sprite que colisionó con el grupo.

    Aquí está el código actualizado:

    class Landschaft(pygame.sprite.Sprite):       
        def __init__(self,image):
            pygame.sprite.Sprite.__init__(self) 
            self.image = image       
            self.rect = self.image.get_rect()            
            self.rect.x = random.randrange(60, breite -60)
            self.rect.y = random.randrange(100, hoehe - 200) 
            self.rect.center = ( self.rect.x,self.rect.y)
    
    land = pygame.sprite.Group()
    
    for i in range(5):
          image = gegend[i]     
          m = Landschaft(image)        
          hits = pygame.sprite.spritecollide(m,land,True)
    
          if hits:
              i-=1
              print(m.rect.x) 
    
          land.add(m)
    

Comments are closed.