为什么我的图块在 pygame 中呈现这样?
Why do my tiles render like this in pygame?
这段代码生成了一个平铺地图
for tiley in range(0,len(level)):
for tilex in range(0,len(level[tiley])):
for tiletype in level[tiley]:
if tiletype == 0:
screen.blit(air, ((tilex*50,tiley*50)))
if tiletype == 1:
screen.blit(grass, ((tilex*50,tiley*50)))
来自这个二维列表。
level = [[1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1],[1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]]
pygame window 但是显示 a different tilemap entirely from the list provided. 为什么要这样做?
看起来您的迭代级别超出了您的需要;你只想循环 x 和 y,并在每个坐标处 blit 一次。像这样:
for tiley in range(len(level)):
for tilex in range(len(level[tiley])):
if level[tiley][tilex] == 0:
screen.blit(air, (tilex * 50, tiley * 50))
else:
screen.blit(grass, (tilex * 50, tiley * 50))
但是,我认为您也可以通过避免 range(len(...))
antipattern 并删除一些重复来使您的代码更简洁:
for y, row in enumerate(level):
for x, cell in enumerate(row):
tile = grass if cell else air
screen.blit(tile, (x * 50, y * 50))
这段代码生成了一个平铺地图
for tiley in range(0,len(level)):
for tilex in range(0,len(level[tiley])):
for tiletype in level[tiley]:
if tiletype == 0:
screen.blit(air, ((tilex*50,tiley*50)))
if tiletype == 1:
screen.blit(grass, ((tilex*50,tiley*50)))
来自这个二维列表。
level = [[1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1],[1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]]
pygame window 但是显示 a different tilemap entirely from the list provided. 为什么要这样做?
看起来您的迭代级别超出了您的需要;你只想循环 x 和 y,并在每个坐标处 blit 一次。像这样:
for tiley in range(len(level)):
for tilex in range(len(level[tiley])):
if level[tiley][tilex] == 0:
screen.blit(air, (tilex * 50, tiley * 50))
else:
screen.blit(grass, (tilex * 50, tiley * 50))
但是,我认为您也可以通过避免 range(len(...))
antipattern 并删除一些重复来使您的代码更简洁:
for y, row in enumerate(level):
for x, cell in enumerate(row):
tile = grass if cell else air
screen.blit(tile, (x * 50, y * 50))