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]
并且由于纹理中没有这样的键,所以你有错误。
我正在 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]
并且由于纹理中没有这样的键,所以你有错误。