У меня возникают проблемы с неопределенными именами при следовании учебнику по Pygame - PullRequest
0 голосов
/ 06 января 2019

Я слежу за этим уроком о том, как сделать игру с плиткой с помощью Pygame, отсюда: https://qq.readthedocs.io/en/latest/. Когда я запускаю программу, я получаю эту ошибку:

NameError: имя 'row' не определено.

Я понятия не имею, как бы вы определили строку, и мне также интересно, имеет ли это какое-то отношение к тому году, когда было написано руководство (2011 означает, что то, что работало в более новой версии python, больше не работает). Строка кода, которая выдает эту ошибку, такова:

for x, row in enumerate(row):

1 Ответ

0 голосов
/ 06 января 2019

Я считаю, что код такой:

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):.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...