我正在使用 pygame 制作游戏并想展示一个介绍。我的问题是我希望玩家能够点击每张幻灯片直到最后,然后过渡到游戏本身。目前我有一个循环,它可以立即浏览所有幻灯片。 有没有办法可以格式化它,以便玩家可以逐张单击幻灯片?谢谢!
我尝试过各种类型的循环和迭代。我发现的一个解决方法是制作大量不同的 while 语句,例如“while intro1”进入“while intro2”,但是很麻烦。希望有更好的方法。
#introduction screen
while intro:
img1 = pygame.image.load("./sprites/img1.png")
img2 = pygame.image.load("./sprites/img2.png")
img3 = pygame.image.load("./sprites/img3.png")
img4 = pygame.image.load("./sprites/img4.png")
imgs = [img1, img2, img3, img4]
display_surface = pygame.display.set_mode((0, 0))
display_surface.blit(img1, (0, 0))
pygame.display.update()
events = pygame.event.get()
for event in events:
if event.type == pygame.MOUSEBUTTONUP:
for i in range(len(imgs)):
display_surface.blit(imgs[i], (0, 0))
i += 1
pygame.display.update()
if i >= 3:
intro = False
run = True
最佳答案
需要进行一些重组。首先,您将使用 current_image
跟踪当前所在的图像。在循环之前它被设置为 0,这意味着我们将从第一张图像开始。
图像本身在每次循环时都不会改变。它们只需要在循环之前加载一次。
您的 for event in events:
循环中有太多内容。在这里,您应该执行某个按键将发生的最小更改。因此,单击时,我们将 current_image
更改为增加 1,仅此而已。
完成所有操作后,您将图像复制到屏幕上并进行更新。希望这会有所帮助。
#introduction screen
current_image = 0
img_names = ["./sprites/img1.png", "./sprites/img2.png", "./sprites/img3.png", "./sprites/img4.png"]
imgs = [pygame.image.load(img) for img in img_names]
display_surface = pygame.display.set_mode((0, 0))
while intro:
events = pygame.event.get()
for event in events:
if event.type == pygame.MOUSEBUTTONUP:
current_image +=1
display_surface.blit(imgs[current_image], (0, 0))
pygame.display.update()
if current_image >= 3:
intro = False
run = True
关于python - 在 Pygame 中点击幻灯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55975641/