2017-05-02 23 views
-1

私は、ゲームのさまざまな時点でブリットするために、パイゲームで約200の画像を読み込む必要があります。私はこれのための関数を書こうとしましたが、NameError: name 'tomato' is not definedと一緒に戻ってきました。PyGameで複数の画像を読み込む方法は?

イメージ名のすべてがロードされたイメージの変数は、下の何格納されていますので、私はそれをどのように行うならば、良くなるアレイを使用してtomato = pygame.image.load("tomato.png")

でしょうか?

コード:

def load(image): 
    imagename = image 
    imagetitle = str(imagename)+".png" 
    image = pygame.image.load(imagetitle) 
    return image 

load("tomato") 

def blit_f(fruit): 
    gamedisplay.blit(fruit,(0,0)) 
    pygame.display.update() 

fruitlist = []   

running = False 
while not running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = True 

     if event.type == pygame.MOUSEMOTION: 
      mouse = pygame.mouse.get_pos() 
      color = screen.get_at(mouse) 

      if color == (209,0,0,255): 
       blit_f(tomato) 
       fruitlist.insert(0,"tomato") 

     if event.type == pygame.MOUSEBUTTONDOWN: 

      if fruitlist[0] == "tomato": 
       gamedisplay.blit(tomato,(0,0)) 
       pygame.display.update() 

NameErrorがtomato.pngのブリットにつながる条件が満たされた場合にのみ発生します。私はload(tomato)代わりのを記述する場合、私は

赤トマト画像即ち色にカーソルを合わせると""とすると、コードを実行するとすぐにNameErrorが表示され、gamedisplay.blit(tomato)の代わりにload("tomato")の代わりにload(tomato)がハイライト表示されます。

+1

あなたのコードは、あなたがそれを定義する前にトマトを使用しようとすることを示していますか? – Drako

+0

コードの操作順序を確認してください – Drako

+0

このエラーが発生するために使用しているコードで元の質問を編集してください。@ I.Kaur –

答えて

0

load("tomato")を呼び出してイメージをロードしますが、戻り値は無視します。代わりに

tomato = load("tomato") 

を試してください。

+0

私はこの機能をそのまま使用し、この行を使用していました。これは199枚の画像でこれをやっていますが、これまでよりもちょっと退屈です! –

0

非常に多くの画像をロードする場合は、os.listdirを使用して、ディレクトリ内のすべての画像を辞書に入れます。また、パフォーマンスを向上させるために画像をロードした後にconvertまたはconvert_alphaを使用してください。あなたにもサブディレクトリからすべての画像をロードしたい場合は

def load_images(path_to_directory): 
    """Load images and return them as a dict.""" 
    image_dict = {} 
    for filename in os.listdir(path_to_directory): 
     if filename.endswith('.png'): 
      path = os.path.join(path_to_directory, filename) 
      key = filename[:-4] 
      image_dict[key] = pygame.image.load(path).convert() 
    return image_dict 

os.walk使用:

def load_images(path_to_directory): 
    """Load all images from subdirectories and return them as a dict.""" 
    images = {} 
    for dirpath, dirnames, filenames in os.walk(path_to_directory): 
     for name in filenames: 
      if name.endswith('.png'): 
       key = name[:-4] 
       img = pygame.image.load(os.path.join(dirpath, name)).convert() 
       images[key] = img 
    return images 
+0

ファイル内にある7つのサブファイルから多くの画像をロードするにはどうすればよいですか? –

+0

7つのサブディレクトリにすべてのイメージをロードしますか?次に、['os.walk'](https://docs.python.org/3/library/os.html#os.walk)を使用するか、上に示した関数を何度も使用することができます(次に、 7つの異なる辞書)。 – skrx