我的Python版本是3.2,Pygame是1.9.1。

我按照此处找到的说明的第一部分进行操作: http://wiki.sheep.art.pl/Tiled%20Map%20in%20PyGame, ,进行一些调整以适应我自己的图块集:

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

我收到 Nonetype 错误 for x, row in enumerate(table):*。我尝试了各种方法,甚至移动图块本身,并更改文件类型。我还尝试过其他代码,例如范围。

我过去曾成功加载图像,这只是我第一次尝试使用图块集。该图块集有 9 个 16x16 的图块,其中有一定的透明度(因此 convert_alpha()).

那么,谁能告诉我为什么我得到了 NoneType 这里有错误吗?和形象有关系吗?(请注意,“对于范围内的tileX”中有3的原因是它不接受教程中第四项设置的计算,所以我自己做了数学。)

  • 编辑:不小心输入: for x, row in range(table): 代替 for x, row in enumerate(table): 在描述中。
有帮助吗?

解决方案

您没有发布完整的代码,或者犯了一个错误:没有 for x, row in range(table) 上面代码中的一行。通过这个特定的代码,您似乎试图从 range 函数,但它一次只返回一个值。

您可能想输入 for x, row in enumerate(table). 。在这种情况下,调用时需要返回一个对象 table = load_tileset('tableset.gif', 16, 16) 因为除非明确告知任何给定函数 return 一个对象,它会返回 None 这就是为什么这条线会给你带来麻烦,因为 typeNoneNonetype

这是一个函数返回的示例 None 然后返回一个字符串, 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top