error: Couldn't open .png file (Python - Pygame library)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 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"\..\.. esources\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) |
完整的错误消息是:
1 2 3 4 5 6 7 8 9 10 | Traceback (most recent call last): File"C:\Users ZXT\Documents\GameLab\Penaldo\game\version1\Penaldo.py", line 79, in <module> p1 = Player() File"C:\Users ZXT\Documents\GameLab\Penaldo\game\version1\Penaldo.py", line 49, in __init__ self.player = pygame.image.load(r"\..\.. esources\mario_sprite_by_killer828-d3iw0tz.png") error: Couldn't open \..\.. esources\mario_sprite_by_killer828-d3iw0tz.png |
我读了一些问题,如python 2.6:"无法打开图像"错误,错误:无法打开图像,我尝试实现不同的提示,但窗口变黑并挂起。
通常,为了确保图像文件可以在不引发有关找不到图像的错误的情况下加载,请将该图像与程序放在同一文件夹中。至于pycharm用户,只需将文件复制并粘贴到当前具有正确程序的项目中。如果你不喜欢用另一种方式,使用
1 2 | \..\.. esources\mario_sprite_by_killer828-d3iw0tz.png |
到:
1 | /../../resources/mario_sprite_by_killer828-d3iw0tz.png |
这个答案值得赞扬,您的问题的真正解释可以在堆栈溢出的这个问题中找到:python 2.6:"cannot't open image"错误希望这对你有帮助!哦,如果上面的问题链接没有帮助,请使用pygame docs链接。
我有一些想法。
以下是一些建议:
在
尝试使用更具组织性的安排,这样就不需要进行迄今为止的回溯。
检查和/或重命名文件以确保使用的路径正确。确保文件实际上是PNG。
使用
试试这个。顺便说一句,您的键事件不会像预期的那样工作,因为键按下变量没有持续更新,您只是在开始时对它进行了初始化。
看看那个/../../I,我发现您正试图根据用户到图像的文件路径来查找动态文件路径?这不是它的工作原理,这就是为什么你会犯这个错误。它找不到.png文件,因为没有如下内容:
1 2 | \..\.. esources\mario_sprite_by_killer828-d3iw0tz.png |
您可以看看这篇解释得很好的文章:Python中的相对路径