如何在 Pygame 中将对象与其阴影相关联?

问题描述

我有一个云类,我有各种各样的云形状,所以我需要将每个变化与其对应的阴影相关联,以便在其下方显示

但我尝试创建一个字典,以云的图像作为键,它们的阴影作为值,我还创建了将云和阴影分别放在一个单独的列表中,然后使用 for 循环对它们进行迭代并将它们联系起来,但这些都不起作用。

我遇到了一个错误显示 TypeError: 'pygame.Surface' object is not iterable

class Cloud(object):
    def __init__(self:
        imgs = random.choice([pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud1.png').convert_alpha(),pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud2.png').convert_alpha(),pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud3.png').convert_alpha()])
        shadows = [pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\cloud_shadow.png').convert_alpha(),pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud2shadow.png').convert_alpha(),pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud3shadow.png').convert_alpha()]
        self.x = random.randrange(-1500,-500)
        self.y = random.randrange(-100,400)
        for img in imgs:
            for shadow in shadows:
                i = random.randrange(len(imgs))
                self.img = random.choice(self.imgs[i])
                self.shadow = self.shadow[i]

那我该怎么办?

注意:

我只需要将云的图像与其阴影相关联,但我知道如何显示每个对象及其对应的阴影。

顺便说一句,别管我乱七八糟的文件名^^

提前致谢!

解决方法

创建云列表和阴影列表:

imgs = [pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud1.png').convert_alpha(),pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud2.png').convert_alpha(),pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud3.png').convert_alpha()]

shadows = [pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\cloud_shadow.png').convert_alpha(),pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud2shadow.png').convert_alpha(),pygame.image.load(r'C:\Users\Salem\Documents\MyGame1\testcloud3shadow.png').convert_alpha()]

zip 列表并选择一个随机元素:

self.img,self.shadow = random.choice(list(zip(imgs,shadows)))

zip 接受两个集合并将它们合并为一个集合,其中每个项目都是每个集合中一个项目的元组。