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.
È stato utile?

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top