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

如何在Pygame中让新生成对象每次随机切换精灵图?

解决Pygame中随机生成水果/垃圾食品Sprite的问题

问题分析

你尝试用random.shuffle()来随机选择Sprite,但这个函数的作用是原地打乱列表,返回值为None。将None赋值给self.image后,调用self.image.get_rect()会直接报错,因为None没有该方法。

修复方案

改用random.choice()函数直接从列表中随机选取一个元素,同时建议统一缩放Sprite尺寸(和其他道具保持一致的60x60),并处理图片透明通道避免黑边问题。

修改后的关键代码

Fruits类修正

class Fruits(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        # 随机选择水果图片并缩放,去除白色背景(根据你的图片实际背景色调整)
        self.image = pygame.transform.scale(random.choice(fruits_list), (60, 60))
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(WIDTH - self.rect.width)
        self.rect.y = random.randrange(-100, -40)
        self.speedy = 7

Bad_food类修正

class Bad_food(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        # 随机选择垃圾食品图片并缩放,去除白色背景(根据你的图片实际背景色调整)
        self.image = pygame.transform.scale(random.choice(bad_foods_list), (60, 60))
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(WIDTH - self.rect.width)
        self.rect.y = random.randrange(-100, -40)
        self.speedy = 7

额外优化建议

  • 加载图片时使用convert_alpha()替代convert(),更好支持透明背景:
    apple_img = pygame.image.load(os.path.join(img_dir, 'apple.png')).convert_alpha()
    # 其他水果、垃圾食品图片同理
    
  • 统一所有道具尺寸,能让碰撞检测更准确,游戏体验更一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:17:02