我知道有关此类主题的问题已经发布过,但我在其他任何问题上都没有看到错误。
我正在尝试从二维数组中制作平铺背景,但是当我运行它时,我收到此错误:
current_tile = textures [tilemap [x,y]]
TypeError:list indices必须是整数,而不是元组
这是我的代码:
import pygame, sys
from pygame.locals import *
pygame.init()
tilesize = 32
tileswidth = 11
tilesheight = 12
screenwidth = tilesize*tileswidth
screenheight = tilesize*tilesheight
screen = pygame.display.set_mode((screenwidth,screenheight))
tilemap = [
[9,3,2,2,2,4,2,2,2,3,9],
[8,11,10,10,10,10,10,10,10,11,5],
[8,1,6,9,9,9,9,9,8,1,5],
[8,1,5,9,9,9,9,9,7,1,5],
[8,1,6,9,9,9,9,9,7,1,5],
[8,1,5,9,9,9,9,9,8,1,5],
[8,1,12,4,2,3,2,4,13,1,5],
[7,11,10,10,10,11,10,10,10,11,6],
[9,9,9,9,7,1,6,9,9,9,9],
[9,9,9,9,7,1,6,9,9,9,9],
[9,9,9,9,7,1,6,9,9,9,9]
]
textures = {
1 : pygame.image.load("data/tiles/1.jpg").convert_alpha(),
2 : pygame.image.load("data/tiles/2.jpg").convert_alpha(),
3 : pygame.image.load("data/tiles/3.jpg").convert_alpha(),
4 : pygame.image.load("data/tiles/4.jpg").convert_alpha(),
5 : pygame.image.load("data/tiles/5.jpg").convert_alpha(),
6 : pygame.image.load("data/tiles/6.jpg").convert_alpha(),
7 : pygame.image.load("data/tiles/7.jpg").convert_alpha(),
8 : pygame.image.load("data/tiles/8.jpg").convert_alpha(),
9 : pygame.image.load("data/tiles/9.jpg").convert_alpha(),
10 : pygame.image.load("data/tiles/10.jpg").convert_alpha(),
11 : pygame.image.load("data/tiles/11.jpg").convert_alpha(),
12 : pygame.image.load("data/tiles/12.jpg").convert_alpha(),
13 : pygame.image.load("data/tiles/13.jpg").convert_alpha()
}
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
for x in range(tilesheight):
for y in range(tileswidth):
current_tile = textures[tilemap[x,y]]
screen.blit(current_tile, (x*tilesize, y*tilesize))
screen.fill(0,0,0)
pygame.display.update()
任何帮助都将不胜感激。
答案 0 :(得分:1)
TypeError:列表索引必须是整数,而不是元组
要修复此错误,您必须使用整数(数字)而不是元组(1,2)作为列表索引。从我看到的,你正在尝试做二维列表[1,2]这是错误的,因为二维数组/列表是列表列表。 这就是你必须使用 tilemap [x] [y] 的原因。 Tilemap [x]返回tilemap中的子列表,tilemap [x] [y]是来自 的子列表中的,返回元素y 。
答案 1 :(得分:0)
你无法访问带有元组的列表,这是tilemap[x,y]
正在做的,你想要的:
tilemap[x][y]
从索引y的子列表索引x的元素:
In [7]: tilemap = [
...: [9,3,2,2,2,4,2,2,2,3,9],
...: [8,11,10,10,10,10,10,10,10,11,5],
...: [8,1,6,9,9,9,9,9,8,1,5],
...: [8,1,5,9,9,9,9,9,7,1,5],
...: [8,1,6,9,9,9,9,9,7,1,5],
...: [8,1,5,9,9,9,9,9,8,1,5],
...: [8,1,12,4,2,3,2,4,13,1,5],
...: [7,11,10,10,10,11,10,10,10,11,6],
...: [9,9,9,9,7,1,6,9,9,9,9],
...: [9,9,9,9,7,1,6,9,9,9,9],
...: [9,9,9,9,7,1,6,9,9,9,9]
...: ]
In [8]: tilemap[0][0]
Out[8]: 9
In [9]: tilemap[1][0]
Out[9]: 8
您也可以遍历tilemap列表:
for ind, sub in enumerate(tilemap):
for i, y in enumerate(sub):
current_tile = textures[y]
screen.blit(current_tile, (ind * tilesize, i * tilesize))