2017-02-20 4 views
2

Не уверен, что я сделал неправильно, я после учебник о том, как сделать игру с Python и PyGame и я получаю ошибку:Python - ошибка: не удалось открыть файл .png

pygame.error: Couldn't open resources/images/dude.png  

Мои код выглядит следующим образом:

import pygame 
from pygame.locals import * 


pygame.init() 
width, height = 640, 480 
screen=pygame.display.set_mode((width,height)) 

player = pygame.image.load("resources/images/dude.png") 

while 1: 

    screen.fill(0) 

    screen.blit(player, (100,100)) 

    pygame.display.flip() 

    for event in pygame.event.get(): 


     if event.type==pygame.QUIT: 
      pygame.quit() 
      exit(0) 

сообщение полная ошибка:

ALSA lib confmisc.c:768:(parse_card) cannot find card '0' 
ALSA lib conf.c:4292:(_snd_config_evaluate) function 
snd_func_card_driver returned error: No such file or directory 
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings 
ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_concat 
returned error: No such file or directory 
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name 
ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_refer 
returned error: No such file or directory 
ALSA lib conf.c:4771:(snd_config_expand) Evaluate error: No such file or 
directory 
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default 
Traceback (most recent call last): 
    File "/root/Documents/PyGame/game.py", line 9, in <module> 
    player = pygame.image.load("resources/images/dude.png") 
pygame.error: Couldn't open resources/images/dude.png 
+0

делает плеер = pygame.image.load (os.path.join (".", "Resources/images/dude.png")) работает? – user2682863

ответ

2

Использовать относительные пути вместо (это всегда лучше сделать):

import os 

current_path = os.path.dirname(__file__) # Where your .py file is located 
resource_path = os.path.join(current_path, 'resources') # The resource folder path 
image_path = os.path.join(resource_path, 'images') # The image folder path 

Делая это, где бы вы ни переместить папку, содержащую файл .py, его подкаталогах (и, следовательно, все, что они содержат) по-прежнему можно получить доступ без необходимости изменять код.


Окончательный код:

import pygame 
import os 
from pygame.locals import * 


pygame.init() 

width, height = 640, 480 
screen = pygame.display.set_mode((width, height)) 

current_path = os.path.dirname(__file__) # Where your .py file is located 
resource_path = os.path.join(current_path, 'resources') # The resource folder path 
image_path = os.path.join(resource_path, 'images') # The image folder path 

player_image = pygame.image.load(os.path.join(image_path, 'dude.png')) 

while 1: 

    screen.fill(0) 

    screen.blit(player, (100,100)) 

    pygame.display.flip() 

    for event in pygame.event.get(): 


     if event.type==pygame.QUIT: 
      pygame.quit() 
      exit(0) 

Используйте этот метод, получающий доступ для всех других файлов, и вы избежите кучи проблем.

+0

Это прекрасно работает! –

-1

Python ищет файлы в той же папке, в которой программа есть. Этот код, который вы написали, говорит, что в той же папке, в которой у вас есть ваша программа, есть папка, называемая ресурсами, и в этом есть папка с изображениями. Если это так, я не могу вам помочь, но если это нет, то используйте полное расположение файла.

+0

Я не уверен, если вы говорили о Windows, но в Linux, python ищет файлы для открытия в папке, где вы запускаете программу. путь должен относиться к папке, в которой вы запускаете программу, если это не абсолютный путь. – Shiping

+0

Также проверьте капитализацию. Это звучит глупо, но я лично потратил много времени на то, чтобы понять, почему он не импортирует 'dude.png', когда файл на самом деле называется' Dude.png' – Synedraacus

-1

Добавить ./ на ваш путь вместо этого.

player = pygame.image.load("./resources/images/dude.png") 
+0

Джейкоб, вы должны попробовать это, он отлично работает для меня :) – nipkip