Pygame und Tilesets haben die Gebrauchsanweisung befolgt, aber ich erhalte die Fehlermeldung „noneType“.

StackOverflow https://stackoverflow.com//questions/11659589

Frage

Meine Python-Version ist 3.2 und Pygame ist 1.9.1.

Ich habe den ersten Teil der Anleitung befolgt, die Sie hier finden: http://wiki.sheep.art.pl/Tiled%20Map%20in%20PyGame, mit ein paar Anpassungen, um sie an mein eigenes Kachelset anzupassen:

def load_tileset(filename, width, height):
   image = pygame.image.load(filename).convert_alpha()
   imageWidth, imageHeight = image.get_size()
   tileSet = []
   for tileX in range(0, 3):
      line = []
      tileSet.append(line)
      for tileY in range(0, 3):
         rect = (tileX*width, tileY*height, width, height)
         line.append(image.subsurface(rect))
if __name__=='__main__':

   pygame.init()
   screen = pygame.display.set_mode((WIDTH, HEIGHT))
   pygame.display.set_caption('Tiled Background')
   screen.fill((240, 240, 255))
   table = load_tileset('tableset.gif', 16, 16)
   for x, row in enumerate(table):
      for y, tile in enumerate(row):
         screen.blit(tile, (x*24, y*24))
   pygame.display.flip()
   while pygame.event.wait().type != pygame.locals.QUIT:
        pass

Ich erhalte den Nonetype-Fehler for x, row in enumerate(table):*.Ich habe verschiedene Dinge ausprobiert, sogar das Kachelset selbst verschoben und den Dateityp geändert.Ich habe auch andere Codes ausprobiert, z. B. Range.

Ich habe es in der Vergangenheit geschafft, Bilder zu laden. Dies ist nur mein erster Versuch, einen Kachelsatz zu verwenden.Das Fliesenset besteht aus 9 16x16-Kacheln und weist eine gewisse Transparenz auf (daher die convert_alpha()).

Kann also jemand sagen, warum ich das bekommen habe? NoneType Fehler hier?Hat es etwas mit dem Bild zu tun?(Beachten Sie, dass der Grund für die 3 im Feld „Für TileX im Bereich“ darin liegt, dass die Berechnung nicht als viertes im Tutorial festgelegt wurde, also habe ich die Berechnungen einfach selbst durchgeführt.)

  • Bearbeiten:Aus Versehen getippt: for x, row in range(table): anstatt for x, row in enumerate(table): in Beschreibung.
War es hilfreich?

Lösung

Sie veröffentlichen nicht den vollständigen Code oder haben einen Fehler gemacht:da ist kein for x, row in range(table) Zeile im obigen Code.Mit diesem speziellen Code versuchen Sie anscheinend, zwei Variablen aus dem abzurufen range Funktion, aber es wird jeweils nur ein Wert zurückgegeben.

Du wolltest wahrscheinlich tippen for x, row in enumerate(table).In diesem Fall müssen Sie beim Aufruf ein Objekt zurückgeben table = load_tileset('tableset.gif', 16, 16) denn es sei denn, eine bestimmte Funktion wird ausdrücklich dazu aufgefordert return ein Objekt, es wird zurückkehren None und deshalb macht dir die Leitung Ärger, weil die type von None Ist Nonetype

Hier ist ein Beispiel für eine Funktion, die zurückkehrt None und dann eine Zeichenfolge zurückgeben, a returned string:

def thisFuncReturnsNone():
   pass

print 'what gets returned:', thisFuncReturnsNone()
>>> None

def thisFuncReturnsAString():
  return 'a returned string'

print 'what gets returned a second time:', thisFuncReturnsAString()
>>> a returned string
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top