Python(Pygame) 按键错误

Python(Pygame) Key Error

我正在 pygame 使用 tilemap 制作游戏,我遇到了以下错误

"Traceback (most recent call last):
    File "C:\Users\Dusty\Dropbox\~MAIN FOLDER~\Projects\Sunless\game.py", line 52, in <module>
    surface.blit(textures[tileMap[row][column]], (column*tileSize, row*tileSize, tileSize, tileSize))
KeyError: 174"

使用此代码:

import pygame

gameIsRunning = True

tileSize = 32
mapHeight = 19
mapWidth = 25

surface = pygame.display.set_mode((tileSize * mapWidth, tileSize * mapHeight))
pygame.display.set_caption("Game")

floor = 109
wall = 166

textures = {
            floor : pygame.image.load('data/floor.png'),
            wall: pygame.image.load('data/wall.png'),

            }

tileMap = [
           [109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109],
           [109, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 109, 166, 166, 166, 166, 166, 166, 166, 166, 109],
           [109, 166, 109, 109, 109, 109, 109, 109, 109, 166, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 166, 109, 109, 109],
           [109, 166, 109, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 109, 166, 109],
           [109, 166, 109, 166, 109, 109, 109, 109, 109, 166, 109, 109, 109, 109, 109, 109, 166, 109, 166, 109, 109, 166, 109, 166, 109],
           [109, 166, 109, 166, 109, 166, 166, 166, 109, 166, 166, 166, 166, 166, 166, 109, 166, 109, 166, 166, 166, 166, 166, 166, 109],
           [109, 166, 166, 166, 166, 166, 109, 166, 166, 166, 109, 109, 166, 109, 166, 109, 166, 109, 166, 109, 166, 166, 109, 166, 109],
           [109, 166, 109, 166, 109, 166, 109, 109, 109, 166, 166, 166, 166, 109, 166, 109, 166, 166, 166, 166, 109, 166, 109, 166, 109],
           [109, 166, 109, 166, 109, 166, 166, 166, 166, 166, 109, 109, 166, 109, 166, 166, 166, 109, 166, 109, 166, 166, 109, 166, 109],
           [109, 166, 109, 166, 109, 166, 109, 166, 109, 166, 109, 109, 166, 109, 166, 109, 166, 109, 166, 166, 109, 166, 109, 166, 109],
           [109, 166, 109, 166, 109, 166, 166, 166, 109, 166, 166, 166, 166, 166, 166, 109, 166, 109, 166, 109, 166, 166, 109, 166, 109],
           [109, 166, 109, 166, 109, 109, 109, 166, 109, 166, 109, 166, 109, 109, 166, 109, 166, 109, 166, 166, 109, 166, 166, 166, 109],
           [109, 109, 109, 166, 166, 166, 166, 166, 166, 166, 109, 166, 109, 109, 166, 109, 166, 109, 166, 109, 109, 166, 109, 109, 109],
           [109, 166, 109, 166, 109, 109, 166, 109, 109, 166, 109, 166, 109, 166, 166, 109, 166, 109, 166, 109, 109, 166, 109, 166, 109],
           [109, 166, 109, 166, 109, 109, 166, 109, 109, 166, 109, 166, 166, 166, 109, 109, 166, 109, 166, 109, 109, 166, 109, 166, 109],
           [109, 166, 109, 166, 166, 166, 166, 166, 109, 166, 109, 166, 166, 109, 109, 166, 166, 109, 166, 109, 109, 166, 109, 166, 109],
           [109, 166, 109, 109, 109, 109, 109, 166, 109, 166, 166, 166, 166, 166, 166, 166, 166, 109, 166, 109, 109, 174, 166, 166, 109],
           [109, 166, 166, 166, 166, 166, 166, 166, 166, 166, 109, 109, 109, 109, 166, 166, 166, 109, 166, 166, 166, 166, 109, 166, 109],
           [109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109]
            ]

def gameQuit():
    pygame.quit()
    quit()
while gameIsRunning == True:
    surface.fill((0, 0, 0))

    for row in range(mapHeight):
        for column in range(mapWidth):
            surface.blit(textures[tileMap[row][column]], (column*tileSize, row*tileSize, tileSize, tileSize))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameQuit()

小提示,如果你想使用 tilemap 制作游戏,请使用 Tiled, also use TMX import library by Richard Jones

而且您似乎正在尝试访问不在纹理中的元素。 tileMap 中的值为 174(倒数第三行)。

surface.blit(textures[tileMap[row][column]]

在这里您访问的元素在纹理字典中不存在。它被解释为:

textures[174]

并且由于纹理中没有这样的键,所以你有错误。