Вопросы относительно функции pygame image.load - PullRequest
1 голос
/ 04 апреля 2020

Привет, ребята, средний учебник noob ie здесь, так что я недавно закончил смотреть этот сладкий урок https://www.youtube.com/watch?v=rfscVS0vtbw и решил сразу перейти к Pygame: D

Проблема заключается в следующем , У меня есть папка, из которой я хочу получить несколько изображений, и многие (30-40) используют функцию pygame.image.load (они нужны в качестве спрайтов для моей игры), они находятся в другом каталоге, чем мой файл python Например, моя python игра находится в "C: \ PythonProjects \ Programs \ Pygame2.py", а изображения в "C: \ Users \ user \ Documents \ Generi c game"

Я попытался погуглить и, видимо, тебе нужно скопировать весь путь к каталогу, чтобы загрузить каждый из них? (pygame.image.load ("C: / Users / user / Documents / Le game / BG.jpg"), и мне интересно, есть ли способ сделать это быстрее, скажем, у меня был проект с более чем 100 изображениями .. .

Большое спасибо за то, что нашли время помочь <3 </p>

Вот мой код для справки (структура грязная, но я все поменяю, как только разберусь с этой проблемой):

import pygame

pygame.init()

win = pygame.display.set_mode((800, 700))
pygame.display.set_caption("Potato ultra")
BG = pygame.image.load("C:/Users/user/Documents/Generic game/BG.jpg")
walkRight = [#need to use pygame.image.load function for images here]
walkLeft = [#Same case]

SW = 500
x = 0
y = 480
width = 64
height = 64
vel = 20
isJump = False
JumpCount = 10

def redrawGameWindow():

    win.blit(BG, (0,0))
    pygame.draw.rect(win, (0, 200, 0), (x, y, width, height))
    pygame.display.update()


run = True
while run:
    pygame.time.delay(50)

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

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and x > 0:
        x -= vel
    if keys[pygame.K_RIGHT] and x < SW - width:
        x += vel
    if not isJump:
        if keys[pygame.K_UP] and y > 0:
            y -= vel
            if y < 0:
                y = 0
        if keys[pygame.K_DOWN] and y < SW - vel:
            y += vel
            if y > 436:
                y = 436
        if keys[pygame.K_SPACE]:
            isJump = True
    else:
        if JumpCount >= -10:
            y -= (JumpCount * 4)
            if y < 0:
                y = 0
            JumpCount -= 2
        else:
            isJump = False
            JumpCount = 10

    redrawGameWindow()

pygame.quit()

Ответы [ 3 ]

3 голосов
/ 04 апреля 2020

Ну, для начала у вас может быть переменная, чтобы она выглядела чище

path = "C:/Users/user/Documents/Generic game/"
bg = pygame.image.load(path + "BG.jpg")

Для walkRight и walkLeft, я предполагаю, что это анимация, поэтому вы можете сделать для l oop , где имена img1.jpg, img2.jpg, img3.jpg ...

for i in range(num_of_imgs):
    Dir = path + "img" + str(i) + ".jpg"
    walkRight.append(pygame.image.load(Dir))

или в одну строку

walkRight = [pygame.image.load(path + "img" + str(i) + ".jpg") for i in range(num_of_img)]

другой способ - использовать os.listDir

filename = os.listDir("C:/Users/user/Documents/Generic game/")
1 голос
/ 04 апреля 2020

Вы можете иметь строку с именем directory и присоединить ее к каждому загружаемому пути изображения:

directory = "C:/Users/user/Documents/Generic game/"
BG = pygame.image.load(directory+"BG.jpg")

Если вы загружаете много изображений, у вас может быть список имен файлов и l oop через них, чтобы создать новый список изображений:

image_names = ["BG.jpg", "example.jpg", "example.jpg"]
images = []
for image in image_names:
    images.append(pygame.image.load(directory+image))
1 голос
/ 04 апреля 2020

Вы можете использовать glob перед загрузкой изображения.

import glob
imageList=glob.glob("C:/Users/user/Documents/Generic game/*.jpg")

Теперь у вас есть список изображений для перебора, как показано ниже.

for each_image in imageList:
    BG = pygame.image.load(each_image)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...