在pygame中加载图像的正确方法是什么?

时间:2014-04-05 06:45:20

标签: python pygame

好吧..我重写了它,但我仍然遇到random.choice的问题  我知道它试图做什么,我确实希望radom.choice在精灵离开屏幕时重置;但它不是随机的......

class Planets(pygame.sprite.Sprite):
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            imageFiles = ["planet_{}.gif".format(num) for num in range (1,4)]
            for files in imageFiles:
                self.image = pygame.image.load(files)    
            self.image.convert()
            self.rect = self.image.get_rect()
            self.x = 700
            self.y = 50
            self.dx = -5

        def update(self):
            self.rect.center = (self.x, self.y)
            self.x += self.dx
            if self.x <= -800:
                self.reset()

        def reset(self):
            self.x = 800
            self.image = random.choice(files)
            self.y = random.randrange(0, screen.get_height())

2 个答案:

答案 0 :(得分:1)

我会这样做:

files = ["planet_{}.gif".format(num) for num in range (1,4)]
for filename in files:
    f = open (filename) .... and so on

当你有所有图像的列表时

image_to_display = random.choice (image_list)

答案 1 :(得分:1)

此代码:

for files in imageFiles:
    self.image = pygame.image.load(files)   

将一张图片加载到self.image,然后将其替换为其他图片。我不知道你的意图,但这个循环没有做任何有用的事情。

此代码:self.image = random.choice(files) - 应该完全失败,因为该函数中不存在files。即使它以某种方式引用init函数中的files变量,它只是一个字符串,因此self.image最终会成为1个字符,而不是实际的图像。

我会尝试这样的事情(遗漏了一些代码):

(in __init__)
self.files = []
for files in imageFiles:
    self.files.append(pygame.image.load(files))
for img in self.files:
    img.convert()
self.reset()

(in reset)
self.image = random.choice(self.files)
self.rect = self.image.get_rect()