Попробуйте загрузить изображения за пределами main_loop
, так как загрузка занимает некоторое время. Также программа выйдет, когда idx
станет True
, и это в вашем случае после 276 итераций, теперь ваша частота кадров установлена на 1000, уменьшите количество кадров. Если вы хотите предотвратить выход программы, удалите idx
из условия while
и поместите другую переменную, которая станет True
, когда вы закроете окно (и при необходимости добавите некоторые другие триггеры), например:
run = True
...
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
Также поставьте pygame.quit()
в конце.
РЕДАКТИРОВАТЬ: Код решения
import pygame as pg
import os
WIN_W = 500
WIN_H = 500
FPS = 2
clock = pg.time.Clock()
window = pg.display.set_mode((WIN_W, WIN_H))
images_list = []
def load_images(images_list):
curr_dir = os.path.dirname(__file__)
dir_images = os.path.join(curr_dir, "images")
for i in range(2, 11, 2):
images_list.append(pg.image.load(os.path.join(dir_images, f"{i}c.png")))
load_images(images_list)
def redraw(i):
window.blit(images_list[i], (0,0))
pg.display.update()
run = True
while run:
clock.tick(1)
for event in pg.event.get():
if event.type == pg.QUIT:
run = False
for i in range(len(images_list)):
pg.time.wait(100)
redraw(i)
pg.quit()
Я получил желаемый результат с pygame.time.wait()
. Я не уверен на 100%, но я думаю, что проблема с нашими предыдущими попытками заключалась в том, что независимо от FPS, весь код в for loop
запускается сразу, поэтому мы видим только последнее изображение. При использовании этого подхода за каждый проход происходит только ОДИН блиттинг. Я знаю, что вы хотите, чтобы ваша программа завершилась после завершения отображения, но это легче проверить.
ПРИМЕЧАНИЕ: не забудьте изменить пути к изображениям и имена переменных.