错误:无法';t打开.png文件(Python-Pygame库)
完整的错误消息是:错误:无法';t打开.png文件(Python-Pygame库),python,pygame,Python,Pygame,完整的错误消息是: import pygame import os import sys import time from pygame.locals import * pygame.init() #Colours here RED = pygame.Color(150, 0, 0) GREEN = pygame.Color( 0, 150, 0) BLUE = pygame.Color( 0, 0, 150) BLACK = p
import pygame
import os
import sys
import time
from pygame.locals import *
pygame.init()
#Colours here
RED = pygame.Color(150, 0, 0)
GREEN = pygame.Color( 0, 150, 0)
BLUE = pygame.Color( 0, 0, 150)
BLACK = pygame.Color( 0, 0, 0)
WHITE = pygame.Color(255, 255, 255)
FPS = pygame.time.Clock()
WIDTH = 1024
HEIGHT = 768
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Penaldo v0.1')
#Set BACKGROUND to an instance of pygame.Surface, which will get its coordinates from the previous ones we assigned to the game's display
BACKGROUND = pygame.Surface((SCREEN.get_width(), SCREEN.get_height()))
SCREEN.blit(BACKGROUND, (0, 0))
key_press = pygame.key.get_pressed()
class Player():
def __init__(self):
#Try to load our sprite.
#'r' makes it a raw string so it ignores escape sequences
self.player = pygame.image.load(r"\..\..\resources\mario_sprite_by_killer828-d3iw0tz.png")
self.p_rect = self.player.get_rect()
#Spawn the player just in the middle of our screen
self.p_rect.centerx = WIDTH / 2
self.p_rect.centery = HEIGHT / 2
def move(self):
if key_press[UP]:
self.p_rect.y -= 5
elif key_press[DOWN]:
self.p_rect.y += 5
elif key_press[LEFT]:
self.p_rect.x -= 5
elif key_press[RIGHT]:
self.p_rect.x += 5
while True:
for event in pygame.event.get():
if event.type == QUIT:
#Some IDLE friendliness (prevents from hanging)
pygame.quit()
sys.exit()
BACKGROUND.fill(GREEN)
p1 = Player()
# FOR THE GAME TO WORK you have to include this one inside main while-loop (no display update = no game)
pygame.display.update()
FPS.tick(40)
回溯(最近一次呼叫最后一次):
文件“C:\Users\NZXT\Documents\GameLab\Penaldo\game\version1\Penaldo.py”,第79行,在
p1=玩家()
文件“C:\Users\NZXT\Documents\GameLab\Penaldo\game\version1\Penaldo.py”,第49行,在\uuu init中__
self.player=pygame.image.load(r“\..\..\resources\mario\u sprite\u by\u killer828-d3iw0tz.png”)
错误:无法打开\..\..\resources\mario\u sprite\u by\u killer828-d3iw0tz.png
我读了一些问题,比如,我试着实现不同的技巧,但是窗口变黑了,挂起了 查看该/。/../我看到您正试图根据用户到图像的文件路径查找动态文件路径?这不是它的工作原理,这就是为什么会出现这种错误。它找不到.PNG文件,因为不存在以下内容:
Traceback (most recent call last):
File "C:\Users\NZXT\Documents\GameLab\Penaldo\game\version1\Penaldo.py", line 79, in <module>
p1 = Player()
File "C:\Users\NZXT\Documents\GameLab\Penaldo\game\version1\Penaldo.py", line 49, in __init__
self.player = pygame.image.load(r"\..\..\resources\mario_sprite_by_killer828-d3iw0tz.png")
error: Couldn't open \..\..\resources\mario_sprite_by_killer828-d3iw0tz.png
你可以看看这篇文章,它很好地解释了这一点:我有一些想法
os.path.join(“…”、“…”、“…”、“resources”、“mario\u sprite\u by_killer828-d3iw0tz.png”)而不是反斜杠insidepygame.image.load
。这将正确地为Linux、Windows和Mac加载您可能正在使用的任何一种
os.chdir
将当前目录更改为包含图像的文件夹,然后使用pygame.image.load('mario\u sprite\u by_killer828-d3iw0tz.png')
试试这些。顺便说一句,您的按键事件将无法按预期工作,因为按键压力变量没有持续更新,您只需在开始时对其进行初始化。通常,为了确保可以加载图像文件而不会引发找不到图像的错误,请将该图像与您的程序放在同一文件夹中。对于PyCharm用户,只需将文件复制并粘贴到具有正确程序的当前项目中即可。如果您不喜欢使用另一种方式,那么使用
os.path.join()
可能会更好。如果您有时间,请尝试访问以获取更多信息。您的问题是您使用的是向后斜杠(),而不是向前斜杠(/)。您应该从以下位置更改路径:
\..\..\resources\mario_sprite_by_killer828-d3iw0tz.png
致:
这个答案和您的问题的真正解释可以在堆栈溢出中的这个问题中找到:
我希望这对你有帮助!哦,如果上面的问题链接没有帮助,请使用Pygame文档链接。\Penaldo\game\version1\Penaldo\resources所以我希望它返回两次,然后输入resources。如果您尝试只使用完整路径,那将非常简单。我收到了相同的错误消息,但是有完整的路径。因此您一直使用
r“C:\Users…”
到.png是吗?您是对的。“错误:无法打开C:\Users\username\etc\Penaldo\resources”,通过重新安装Python和Pygame最终解决了这个问题。
\..\..\resources\mario_sprite_by_killer828-d3iw0tz.png
/../../resources/mario_sprite_by_killer828-d3iw0tz.png