2011-11-30 8 views
3

私のコードでは小さな問題があります。私は、次の形式であるからロードしています奇妙なpygameイメージエラー

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 

それは問題を抱えている最後の行である私は、次のコードを持っています。私がpygame.image.loadを使ってそのpngをロードしようとすると、そのイメージを読み込むことができないというエラーが出ます。しかし、私がPygameロードコードをself.image = pygame.image.load(os.path.join('img', "shadow.png"))に変更すると、それは完全に機能します。私はファイルを何回か見てきましたが、私はこのエラーの理由を見つけることができません。誰かが私が間違っていることを見ることができますか?

トレースバック:

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 
+0

は、なぜあなたはのようなものは使用しないでください: を '[名前を、ntype、text、self.image] = f.read()。split( '\ n') ' – joaquin

答えて

2

あなたは末尾に改行文字がある場合があります。

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)) 
+0

ありがとうございました。ファイルに改行がありませんでした。 – jbills