2

我正在尝试为要用于游戏的地图制作基础,但我无法将图像加载到屏幕上。我尝试使用相同的字母大小写向图像发送绝对文件路径,我尝试更改图像的名称,我尝试加载在我制作的其他程序中工作的不同图像,我尝试将图像与脚本本身位于同一目录中。还没有任何效果。我查看了一些遇到相同问题的人的帖子,例如为什么我的 pygame 图像没有加载?我找不到我的问题的答案。图像不会加载。这是代码:

import sys, pygame
from pygame.locals import *

pygame.init()
size = (600, 400)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Practice Map")
walls = pygame.image.load("C:\Users\dylan\Desktop\Practice Game\brick.jpg")

x = 0
y = 0

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == KEYDOWN and event.key == K_ESCAPE:
            sys.exit()
        if event.type == KEYDOWN and event.key == K_UP:
            y -= 20
        if event.type == KEYDOWN and event.key == K_DOWN:
            y += 20
        if event.type == KEYDOWN and event.key == K_LEFT:
            x -= 20
        if event.type == KEYDOWN and event.key == K_RIGHT:
            x += 20
        screen.fill((0,0,0))
        screen.blit(walls,(x, 330))
        # more bricks to go here later
        pygame.display.flip()

#end

和错误:

Traceback (most recent call last):
  File "C:\Users\dylan\Desktop\Practice Game\move.py", line 8, in <module>
    walls = pygame.image.load("C:\Users\dylan\Desktop\Practice Game\brick.jpg")
error: Couldn't open C:\Users\dylan\Desktop\Practice Gamerick.jpg

我将 Python 2.6 和 PyGame 1.9 用于 Python 2.6 版,IDLE 作为我的编辑器。

4

3 回答 3

5

这里的问题是您使用 \ 作为路径名分隔符,但 \ 在 Python 字符串中也用作转义字符。特别是,\b表示“退格”(或'\x08')。由于没有完全记录但可靠的行为,您可以摆脱其他反斜杠,例如未知转义序列\X被视为反斜杠,后跟X.

有三种解决方案:

  1. 使用原始字符串,这意味着 Python 字符串转义被忽略:r"C:\Users\dylan\Desktop\Practice Game\brick.jpg".
  2. 转义你的反斜杠:"C:\\Users\\dylan\\Desktop\\Practice Game\\brick.jpg".
  3. 改用正斜杠:"C:/Users/dylan/Desktop/Practice Game/brick.jpg".

如果你已经记住了 Python 转义序列的列表,并且愿意依赖可能会改变但可能不会改变的功能,那么你可以只在\b此处转义,但应该清楚为什么其他三个是更好的想法从长远来看。

虽然 Windows 路径名本身使用反斜杠分隔符,但所有内置和标准库 Python 函数以及第三方库中的大多数函数都非常乐意让您使用正斜杠。(这是因为 Windows 根本不允许在路径中使用正斜杠。)

要了解它的工作原理和原因,您可能想尝试打印出字符串:

>>> print "C:\Users\dylan\Desktop\Practice Game\brick.jpg"
C:\Users\dylan\Desktop\Practice Gamrick.jpg
>>> print r"C:\Users\dylan\Desktop\Practice Game\brick.jpg"
C:\Users\dylan\Desktop\Practice Game\brick.jpg
>>> print "C:\\Users\\dylan\\Desktop\\Practice Game\\brick.jpg"
C:\Users\dylan\Desktop\Practice Game\brick.jpg
>>> print "C:/Users/dylan/Desktop/Practice Game/brick.jpg"
C:/Users/dylan/Desktop/Practice Game/brick.jpg
于 2013-02-05T23:47:38.850 回答
4
walls = pygame.image.load("C:\Users\dylan\Desktop\Practice Game\brick.jpg")

你需要逃脱最后\

walls = pygame.image.load("C:\Users\dylan\Desktop\Practice Game\\brick.jpg")

编辑:解释

您需要在最后转义,\因为 , 之后有 ab \,并且\b是退格的转义序列。这将删除序列之前的字符。这就是为什么您需要转义最后一个反斜杠的原因。

于 2013-02-05T23:40:29.513 回答
2

请注意,Windows 路径使用\字符作为分隔符。这些也意味着 Python 字符串中的“转义”。

尝试使用原始字符串:

walls = pygame.image.load(r"C:\Users\dylan\Desktop\Practice Game\brick.jpg")

(注意r"字符串前面的。)

于 2013-02-05T23:45:09.230 回答