我如何从 pygame 中的精灵组中获取第一个元素

How can i get the first element from a sprite group in pygame

我创建精灵组土地。为此,我使用 class Landschaft 和 while 循环
我怎样才能从精灵组土地 rect.x , rect.y rect.w 和 rect.h 中的第一个精灵获得?

class Landschaft(pygame.sprite.Sprite):       
    def __init__(self,image):
        pygame.sprite.Sprite.__init__(self) 
        self.image = image 
        #self.mask = pygame.mask.from_surface(self.image )
        self.rect = self.image.get_rect()        
        #pygame.draw.ellipse(self.image, red, [self.rect.x,self.rect.y,self.rect.width,self.rect.height],3)        
        x=random.randrange(0, breite -60) 
        y=random.randrange(200, hoehe - 200) 
        self.rect.center = (x,y) 

land = pygame.sprite.Group()

while len(land) < anzahl_gegenstaende:
        ii = len(land)
        img = pygame.image.load(f"Bilder/Gegenstaende/geg{ii}.png") 
        if ii == 0:
            img = pygame.transform.scale(img,(breite)) 
        else:    
            zb,zh = img.get_rect().size
            scale_hoehe =100
            scale_breite = int(100 * zb / zh)          
            #img = img.convert_alpha() 
            img = pygame.transform.scale(img,(scale_breite,scale_hoehe))            
        m = Landschaft(img) 
      
        if not pygame.sprite.spritecollide(m, land, False):
            land.add(m)

来自 pygame.sprite.Group can be obtained with the sprites() 方法的精灵列表:。因此 Group 中的第一个精灵是:

first_sprite = group.sprites()[0]

有问题吗? 您的 land = pygame.sprite.Group() 阻止您从 pygame 中的精灵组中获取第一个元素。这是一个相当普遍的问题。要获得它,您必须像以前一样使用 sprites(),但方式不同。您使用代码找到了解决方案。你差点。

作为问题的解决方案,您必须编写 group.sprites()(带有 [0])(而不是 pygame.sprite.Group ())以从精灵组土地中的第一个精灵获取 rect.x, rect.y rect.w 和 rect.h

解决方案? 您的问题的解决方案是:

class Landschaft(pygame.sprite.Sprite):       
    def __init__(self,image):
        pygame.sprite.Sprite.__init__(self) 
        self.image = image 
        #self.mask = pygame.mask.from_surface(self.image )
        self.rect = self.image.get_rect()        
        #pygame.draw.ellipse(self.image, red, [self.rect.x,self.rect.y,self.rect.width,self.rect.height],3)        
        x=random.randrange(0, breite -60) 
        y=random.randrange(200, hoehe - 200) 
        self.rect.center = (x,y) 

land = group.sprites()[0]

while len(land) < anzahl_gegenstaende:
        ii = len(land)
        img = pygame.image.load(f"Bilder/Gegenstaende/geg{ii}.png") 
        if ii == 0:
            img = pygame.transform.scale(img,(breite)) 
        else:    
            zb,zh = img.get_rect().size
            scale_hoehe =100
            scale_breite = int(100 * zb / zh)          
            #img = img.convert_alpha() 
            img = pygame.transform.scale(img,(scale_breite,scale_hoehe))            
        m = Landschaft(img) 
      
        if not pygame.sprite.spritecollide(m, land, False):
            land.add(m)