Pygame e Tilets, seguirono le istruzioni per l'uso, ma ottengo un errore "notype"
Domanda
La mia versione di Python è 3.2, e Pygame è 1.9.1.
Ho seguito la prima parte delle istruzioni trovate qui: http:// wiki .sheep.art.pl / piastrellato% 20map% 20in% 20pyGame , con alcuni aggiustamenti da ospitare per il mio teilet:
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
.
Ottengo l'errore NonoteType in for x, row in enumerate(table):
*. Ho provato varie cose, anche spostando la teilet stessa e cambiando il tipo di file. Ho anche provato altri codici, come l'intervallo.
Sono riuscito a caricare le immagini in passato, questa è la mia prima volta che cerca di utilizzare un set di tessere. Il set di piastrelle ha 9 piastrelle 16x16, e c'è qualche trasparenza in loro (da qui il convert_alpha()
).
Allora, qualcuno può dire perché ho ricevuto l'errore NoneType
qui? È qualcosa a che fare con l'immagine?
(Nota, la ragione per cui ci sono 3 nella "Per Tilex nel raggio" è che non accettare il calcolo come il quarto nel tutorial, quindi ho appena fatto la matematica me stesso.)
- .
- Modifica: accidentalmente digitato:
for x, row in range(table):
anzichéfor x, row in enumerate(table):
nella descrizione.
Soluzione
Non stai pubblicando il codice completo o hai commesso un errore: non c'è nessuna linea for x, row in range(table)
nel codice sopra.Con questo codice specifico, sembri provare a tirare due variabili dalla funzione range
, ma restituisce solo un valore alla volta.
Probabilmente intendete digitare for x, row in enumerate(table)
.In tal caso, è necessario restituire un oggetto quando si chiama table = load_tileset('tableset.gif', 16, 16)
perché a meno che nessuna funzione non sia stata espressa esplicitamente a return
un oggetto, ritornrà None
ed è per questo che la linea ti sta dando problemi, perché il type
di None
è Nonetype
.
Ecco un esempio di una funzione che ritorna None
e quindi restituendo una stringa, 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
.