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

Pygame点击非按钮区域报错AttributeError: 'list' object has no attribute 'sprites'

问题原因

报错的核心诱因是变量类型被错误覆盖:

  • pygame.sprite.spritecollide()的返回值为碰撞到的精灵列表,你在代码中直接将该返回值赋值给了原本是pygame.sprite.Group类型的start_block、quit_block变量
  • 当第一次点击未命中按钮时,这两个变量会被赋值为空列表,下一次触发点击事件再调用spritecollide时,接口要求第二个参数传入精灵组,实际传入的是列表,而列表没有sprites属性,直接触发报错
  • 点击按钮时没有报错是因为命中后要么play变量变为1不会再执行该段检测逻辑,要么直接退出游戏,不会触发第二次检测,因此问题只会在点击非按钮区域时暴露
修复方案

修改鼠标点击事件的代码块,使用独立的新变量接收碰撞检测的返回值,不要覆盖原有的精灵组变量即可:

elif event.type == pygame.MOUSEBUTTONDOWN:
    if play == 0:         
        # 用独立变量接收PLAY按钮碰撞结果,不覆盖原有精灵组
        hit_start = pygame.sprite.spritecollide(player, start_block, True)
        if len(hit_start) >= 1:
            play += 1    
        # 用独立变量接收QUIT按钮碰撞结果,不覆盖原有精灵组
        hit_quit = pygame.sprite.spritecollide(player, quit_block, True)
        if len(hit_quit) >= 1:
            done = True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:05