Pregunta

Mi versión de Python es 3.2 y Pygame es 1.9.1.

Seguí la primera parte de las instrucciones que se encuentran aquí: http://wiki.sheep.art.pl/Tiled%20Map%20in%20PyGame, con algunos ajustes para adaptarme a mi propio conjunto de mosaicos:

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

Recibo el error Ninguno tipo en for x, row in enumerate(table):*.Probé varias cosas, incluso mover el conjunto de mosaicos y cambiar el tipo de archivo.También probé otros códigos, como el rango.

Logré cargar imágenes en el pasado, esta es solo la primera vez que intento usar un conjunto de mosaicos.El conjunto de mosaicos tiene 9 mosaicos de 16x16 y hay cierta transparencia en ellos (de ahí el convert_alpha()).

Entonces, ¿alguien puede decir por qué obtuve el NoneType ¿Error aquí?¿Tiene algo que ver con la imagen?(Tenga en cuenta que la razón por la que hay 3 en "Para TileX en el rango" es que no aceptaría el cálculo establecido en cuarto lugar en el tutorial, así que simplemente hice los cálculos yo mismo).

  • Editar:Escrito accidentalmente: for x, row in range(table): en lugar de for x, row in enumerate(table): En descripción.
¿Fue útil?

Solución

No estás publicando el código completo o has cometido un error:no hay for x, row in range(table) línea en el código anterior.Con este código específico, parece que estás intentando extraer dos variables del range función, pero solo devuelve un valor a la vez.

Probablemente quisiste escribir for x, row in enumerate(table).En ese caso, necesita devolver un objeto cuando llama table = load_tileset('tableset.gif', 16, 16) porque a menos que a cualquier función dada se le indique explícitamente que return un objeto, volverá None y por eso la línea te está dando problemas, porque la type de None es Nonetype

A continuación se muestra un ejemplo de una función que regresa None y luego devolver una cadena, 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top