2017-05-02 3 views
-1

Ich muss ungefähr 200 Bilder in Pygame laden, um an verschiedenen Stellen in meinem Spiel geblitzt zu werden. Ich habe versucht, eine Funktion dafür zu schreiben, kam aber immer wieder mit NameError: name 'tomato' is not defined zurück.Wie lade ich mehrere Bilder in PyGame?

Alle Bildnamen sind das, was die Variable des geladenen Bildes unter gespeichert ist: tomato = pygame.image.load("tomato.png")

wäre besser ein Array verwenden, wenn ja, wie ich das tun würde?

Der Code:

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() 

Der Nameerror tritt nur, wenn die Bedingung zum blitting von tomato.png führenden erfüllt ist: wenn ich über das Bild Tomate dh Farbe

rot schweben

Wenn ich load(tomato) stattdessen schreiben von mit "", NameError kommt auf, sobald ich den Code ausführen, und markiert load(tomato) anstelle von gamedisplay.blit(tomato) wie mit load("tomato").

+1

wo Ihr Code zeigt, dass Sie versuchen, Tomate zu verwenden, bevor es zu definieren? – Drako

+0

überprüfen Reihenfolge der Vorgänge in Ihrem Code – Drako

+0

Bearbeiten Sie Ihre ursprüngliche Frage mit dem Code, den Sie verwenden, um diesen Fehler zu verursachen @ I.Kaur –

Antwort

0

Sie laden das Bild, indem Sie load("tomato") aufrufen, aber Sie ignorieren den Rückgabewert. Versuchen Sie

tomato = load("tomato") 

stattdessen.

+0

Ich behielt die Funktion, wie es ist und benutzte diese Linie, und es funktionierte - tun dies für 199 weitere Bilder ist ein bisschen weniger langweilig als zuvor, danke! –

0

Wenn Sie so viele Bilder laden möchten, verwenden Sie os.listdir und legen Sie alle Bilder in das Verzeichnis in ein Wörterbuch. Verwenden Sie nach dem Laden der Bilder auch convert oder convert_alpha, um die Leistung zu verbessern.

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 

Wenn Sie alle Bilder von Unterverzeichnisse auch laden möchten, verwenden Sie 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

Wie kann ich viele Bilder aus 7 Unterdateien laden, die sich in einer Datei befinden? –

+0

Wollen Sie alle Bilder in 7 Unterverzeichnisse laden? Dann kannst du [os.walk'] (https://docs.python.org/3/library/os.html#os.walk) benutzen oder die Funktion benutzen, die ich dir oben gezeigt habe (dann würdest du es bekommen) 7 verschiedene Wörterbücher). – skrx

Verwandte Themen