My version of Python is 3.2, and Pygame is 1.9.1.
I followed the first part of the instructions found here: http://wiki.sheep.art.pl/Tiled%20Map%20in%20PyGame, with a few adjustments to accommodate for my own tileset:
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
I get the Nonetype error in for x, row in enumerate(table):*. I’ve tried various things, even moving the tileset itself, and changing the file type. I’ve also tried other codes, such as range.
I have managed to load images in the past, this is just my first time trying to use a tile set. The tile set has 9 16×16 tiles, and there is some transparency in them (hence the convert_alpha()).
So, can anyone say why I got the NoneType error here? Is it something to do with the image?
(Note, the reason there’s 3’s in the “For tileX in range” is that it wouldn’t accept the calculation as set fourth in the tutorial, so I just did the maths myself.)
- Edit: Accidently typed:
for x, row in range(table):instead offor x, row in enumerate(table):in description.
You aren’t posting the full code, or have made a mistake: there’s no
for x, row in range(table)line in the code above. With this specific code, you seem to be trying to pull two variables from therangefunction, but it only returns one value at a time.You probably meant to type
for x, row in enumerate(table). In that case, you need to return an object when you calltable = load_tileset('tableset.gif', 16, 16)because unless any given function is explicitly told toreturnan object, it’ll returnNoneand that’s why the line is giving you trouble, because thetypeofNoneisNonetypeHere’s an example of a function returning
Noneand then returning a string,a returned string: