Pygame und Tilesets haben die Gebrauchsanweisung befolgt, aber ich erhalte die Fehlermeldung „noneType“.
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):
anstattfor x, row in enumerate(table):
in Beschreibung.
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