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
相关产品推荐
相关产品推荐

