You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从pygame的sprite group精灵组中获取rect,解决Group无x属性报错

问题解决方法

错误原因

报错的核心原因是land为pygame.sprite.Group类型的精灵组对象,仅单个Landschaft精灵实例拥有rect属性,精灵组本身不包含该属性,调用land.rect.x自然会抛出属性不存在的异常。
你需要的碰撞精灵位置可以直接从pygame.sprite.spritecollide返回的hits列表中获取,该列表存储了所有和当前新创建的m精灵碰撞的已存在精灵实例。

修正代码

基础报错修复

仅修复打印报错的话,修改if hits分支的代码即可:

if hits:
    # 遍历所有碰撞到的精灵,打印对应rect的x坐标
    for hit_sprite in hits:
        print(hit_sprite.rect.x)
    # 注意:当前for循环中i -= 1不会生效,for循环每次迭代会自动赋值range序列的下一个值,无法实现碰撞重试的效果

完整功能实现(支持碰撞后重新生成精灵)

如果你原本的需求是生成5个互不重叠的精灵,碰撞时重新生成当前精灵,可以将循环改为while逻辑:

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()
sprite_count = 0

while sprite_count < 5:
    image = gegend[sprite_count]     
    m = Landschaft(image)        
    hits = pygame.sprite.spritecollide(m, land, True)
    
    if hits:
        for hit_sprite in hits:
            # 打印碰撞精灵的x坐标
            print(hit_sprite.rect.x)
        # 碰撞则跳过后续添加逻辑,重新生成当前精灵
        continue
    
    land.add(m)
    sprite_count += 1

内容的提问来源于stack exchange,提问作者Joachim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:15:01