Странная ошибка в изображении Pygame - PullRequest
3 голосов
/ 30 ноября 2011

У меня небольшая проблема в моем коде. У меня есть следующий код:

import os,pygame
class npc:
    ntype = 0
    image = None
    x = 0
    y = 0
    text = ""
    name = ""
    def Draw(self,screen):
        screen.blit(self.image, [self.x*32,self.y*32])
    def __init__(self,name,nx,ny):
        f = open(name)
        z = 0
        for line in f:
            if z == 0:
                name = line
            if z == 1:
                ntype = line
            if z == 2:
                text = line
            if z == 3:
                self.image = pygame.image.load(os.path.join('img', line))
            self.x = nx
            self.y = ny
            z=z+1

Файл, из которого я загружаю файл, имеет следующий формат:

The Shadow
0
Hello. I am evil.
shadow.png

Это последняя строка с проблемой. Когда я пытаюсь загрузить этот png с помощью pygame.image.load, я получаю сообщение об ошибке, говорящее, что он не может загрузить это изображение. Если я изменю код загрузки Pygame на self.image = pygame.image.load(os.path.join('img', "shadow.png")), он будет работать отлично. Я просмотрел файлы несколько раз и не могу найти причину этой ошибки. Может кто-то видит, что я делаю не так?

Traceback:

Traceback (most recent call last):
  File "./main.py", line 26, in <module>
    rmap = g.Load_Map("l1.txt",char)
  File "/home/josiah/python/rpg/generate.py", line 31, in Load_Map
    npcs.append(npc.npc(str.split(bx,',')[1],x,y))
  File "/home/josiah/python/rpg/npc.py", line 23, in __init__
    self.image = pygame.image.load(os.path.join('img', line))
pygame.error: Couldn't open img/shadow.png

1 Ответ

2 голосов
/ 30 ноября 2011

Возможно, у вас есть завершающий символ новой строки.Попробуйте убрать строку:

self.image = pygame.image.load(os.path.join('img', line.strip()))

Еще лучше, загрузите файл по-другому.Вместо цикла вы можете сделать что-то вроде этого (при условии, что каждый файл отформатирован одинаково и имеет как минимум одинаковое количество строк):

name, ntype, text, filename = [l.strip() for l in open(name).readlines()[:4]]

# Now use the variables normally, for example:
self.image = pygame.image.load(os.path.join('img', filename))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...