2012-07-25 42 views
0

我的Python版本是3.2,Pygame是1.9.1。Pygame和Tilesets,遵循使用说明,但我得到“noneType”错误

我遵循了这个网址的指示第一部分: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 

for x, row in enumerate(table):得到Nonetype错误*。我已经尝试了各种各样的东西,甚至移动了tileset本身,并更改了文件类型。我还尝试了其他代码,如范围。

我已经设法加载过去的图像,这只是我第一次尝试使用瓷砖组。瓷砖组有9个16x16的瓷砖,并有一些透明度(因此convert_alpha())。

那么,谁能说为什么我在这里得到了NoneType错误?这与图像有关吗? (注意,原因有3周的在“为tileX的范围”是,它不会接受在本教程中设定的第4计算,所以我只是做了数学自己。)

  • 编辑:意外键入:for x, row in range(table):而不是for x, row in enumerate(table):的描述。
+0

'load_tileset'不返回任何东西 – ninMonkey 2012-07-31 07:03:41

回答

0

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

您可能打算输入for x, row in enumerate(table)。在这种情况下,你需要当你调用table = load_tileset('tableset.gif', 16, 16)返回一个对象,因为除非任何给定的功能明确告知return一个对象,它会返回None,这就是为什么该行给你的麻烦,因为NonetypeNonetype

这里返回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 
相关问题