Как загрузить большое количество изображений в Pygame простым способом? - PullRequest
0 голосов
/ 03 февраля 2019

Я сейчас работаю над игрой на Pygame.Недавно кто-то помог мне сделать мой бар загрузки на этом сайте ( бог, Rabbid76 - гений ).Более серьезно, мне нужно загрузить все картинки в моей программе, поэтому я использовал следующий код:!(Я использовал 'picture' в качестве заполнителя, в моем реальном каталоге это ' hero_left0.png ' или ' box.png ' или ' Torch.png 'и т. Д.):

Image=picture.image.load(sprite/picture.png).convert_alpha
bar_load=bar_load - 1

И мне нужно сделать это, чтобы соответствовать любой картине.Что означает 350 * 2 элемента, то есть 700 строк кода!

Есть ли способ оптимизировать это?Все картинки находятся в одной папке с именем 'sprites' .

1 Ответ

0 голосов
/ 03 февраля 2019

Насколько я понимаю, вы хотите, чтобы все ваши изображения загружались в ваш код.Вы должны хранить все ваши объекты изображения в dict или какой-то другой структуре.Сделайте что-то вроде этого:

import os

# If using windows make sure to convert all the '\' in the path to '/'
# like so: sprites_folder_path.replace('\', '/')
sprites_folder_path = 'path_to_sprites_folder'
# Make sure there is a '/' at the end of the path 

def image_loader(path) -> str:
    for i in os.listdir(path):
        yield (os.path.splitext(i)[0]),
               picture.image.load(path + i).concert_alpha)


images = dict(image_loader(sprite_folder_ path))

Это генерирует dict всех объектов изображения в качестве значений и имен файлов в качестве ключей.Вы можете обратиться к каждому изображению: images[filename].

Или если вы хотите быть очень кратким об этом тогда;

def image_loader(path) -> str:
    return dict((os.path.splitext(i)[0]), picture.image.load(path + i).concert_alpha) for i in os.listdir(path))

ПРИМЕЧАНИЕ. Это будет работать только в том случае, если все ваши имена файлов являются допустимыми именами переменных python, если не используются какие-либо другие ключи в качестве ключей dict или переименовать те, которые недопустимы

...