我一直在努力使用Python 3.2和Pygame。一切都很顺利,除了有关加载图片的问题。
最初,我想在我的游戏主菜单中使用视频格式显示动画,但我无法让Pygame.movie正常工作,而且我不习惯安装多个插件以使工作正常
我决定尝试一种不同的方法,它涉及我动画中保存的图像序列(超过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)
无论如何修复上面的代码?或者是否有另一种方法可以实现我想要的相同/类似结果?
答案 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的教程。