【问题标题】:How to associate an object to its shadow in Pygame?如何在 Pygame 中将对象与其阴影相关联?
【发布时间】:2021-08-01 05:46:27
【问题描述】:

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

但是我尝试创建一个字典,其中云的图像作为键,它们的阴影作为值,我还创建了将云和阴影分别放在一个单独的列表中,然后使用 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]

那我能做什么呢?

注意:

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

顺便说一句,不要介意我凌乱的文件名^^

提前致谢!

【问题讨论】:

  • 您能否发布一些示例代码,以便我们知道您在做什么?
  • @AdamConrad 完成
  • 看起来您正在选择加载的三个图像中的单个图像,这就是它抱怨无法迭代的原因。另外,因为你是随机选择的,你怎么知道选择的图像是哪个阴影?
  • @AdamConrad,这两个列表的排序方式是第一个列表中索引为 1 的对象对应于第二个列表中索引为 1 的对象,依此类推。此外,我创建了实例的云类,使它们中的每一个代表一个随机选择的云形状

标签: python oop pygame surface


【解决方案1】:

创建云列表和阴影列表:

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 接受两个集合并将它们合并为一个集合,其中每个项目是每个集合中一个项目的元组。

【讨论】:

  • @Rabbid76 我在这一行出现错误:self.img, self.shadow = random.choice(zip(imgs, shadows)),我意识到它应该是:self.img, self.shadow = random.choicel(list(zip(imgs, shadows)))
  • @Developeeer 对不起,我的错:self.img, self.shadow = random.choice(list(zip(imgs, shadows)))
猜你喜欢
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多