繁体   English   中英

如何从 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)

可以使用sprites()方法获得来自pygame.sprite.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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM