为什么我的图块在 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))