遵循pygame教程时,我遇到了未定义名称的问题

时间:2019-01-06 00:20:00

标签: python python-3.x error-handling pygame

我正在从https://qq.readthedocs.io/en/latest/开始关注有关如何使用Pygame制作瓷砖游戏的本教程。当我运行程序时,出现此错误:

  

NameError:未定义名称“行”。

我不知道您将row定义为什么,并且还想知道它是否与本教程的制作年份有关(2011年意味着在较新版本的python中起作用的东西不再起作用。) 引发此错误的代码行是这样的:

for x, row in enumerate(row):

1 个答案:

答案 0 :(得分:1)

我相信代码是这样的:

import pygame
import pygame.locals

def load_tile_table(filename, width, height):
    image = pygame.image.load(filename).convert()
    image_width, image_height = image.get_size()
    tile_table = []
    for tile_x in range(0, image_width/width):
        line = []
        tile_table.append(line)
        for tile_y in range(0, image_height/height):
            rect = (tile_x*width, tile_y*height, width, height)
            line.append(image.subsurface(rect))
    return tile_table

if __name__=='__main__':
    pygame.init()
    screen = pygame.display.set_mode((128, 98))
    screen.fill((255, 255, 255))
    table = load_tile_table("ground.png", 24, 16)
    for x, row in enumerate(table):
        for y, tile in enumerate(row):
            screen.blit(tile, (x*32, y*24))
    pygame.display.flip()
    while pygame.event.wait().type != pygame.locals.QUIT:
        pass

如果我们看一下,循环是 for x, row in enumerate(table): for y, tile in enumerate(row):

row从第一个循环开始是可迭代的。之后,第二个循环使用row获取每个图块,并添加图块精灵。

因此,您的意思是for x, row in enumerate(table):而不是for x, row in enumerate(row):