在Pygame中显示图像并将文件名覆盖到下一个图像

时间:2017-01-26 01:49:13

标签: python animation pygame

我一直在努力使用Python 3.2和Pygame。一切都很顺利,除了有关加载图片的问题。

最初,我想在我的游戏主菜单中使用视频格式显示动画,但我无法让Pygame.movi​​e正常工作,而且我不习惯安装多个插件以使工作正常

我决定尝试一种不同的方法,它涉及我动画中保存的图像序列(超过300张图像)。虽然我已经创建了另一个python应用程序来自动生成代码(而不是我多次复制一段代码),但我认为让程序有1000多行代码来显示所有内容并不高效。

我的问题是我不太确定如何创建一个循环,其中显示的图像(examplefilename0001.jpg)被覆盖,以便显示下一个文件(examplefilename0002.jpg,examplefilename0003等)。

我编写的代码如下,但它给出了错误,指出存在不受支持的操作数类型。

counter=1
for num in range(0,774):
    mainmenu=pygame.image.load('Imgsequence/examplefilename000' + str(counter)+ '.jpg')
    screen.blit(mainmenu +str(counter)+ (100,140))
    pygame.display.flip()
    counter=counter+1
    time.sleep(0.041)

无论如何修复上面的代码?或者是否有另一种方法可以实现我想要的相同/类似结果?

1 个答案:

答案 0 :(得分:2)

函数screen.blit有两个参数:图像(pygame.Surface)和位置(通常是pygame.Rect但是元组/列表等也适用)。我不确定你在做什么,但是你只是在一个参数中传递,你试图将图像,字符串和元组一起添加,这会导致错误。我猜你想要screen.blit(mainmenu, (100,140))

但是,您的程序无法正常工作,因为您需要经常处理事件,以确保您的程序可以在内部与操作系统的其余部分进行交互。如果你不熟悉操作系统会认为pygame已经崩溃了。

您可以创建类似于以下结构的主循环:

counter = 0
image = pygame.image.load('Imgsequence/examplefilename000' + str(counter) + '.jpg')
last_time = pygame.time.get_ticks()
running = True

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    if pygame.time.get_ticks() - last_time >= 41 and counter < 774:  # 41 milliseconds instead of 0.041 seconds.
        counter += 1
        image = pygame.image.load('Imgsequence/examplefilename000' + str(counter) + '.jpg')
        last_time = pygame.time.get_ticks()

    screen.blit(image, (100, 140))
    pygame.display.update()

所有GUI程序都需要一个主循环。 Pygame还有their website的教程。