Pygame 和 Tilesets,遵循使用说明,但我收到“noneType”错误
题
我的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
这就是为什么这条线会给你带来麻烦,因为 type
的 None
是 Nonetype
这是一个函数返回的示例 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
不隶属于 StackOverflow