Python开发Pygame游戏报错:name 'Player' is not defined
修复方案
核心错误原因
报错NameError: name 'Player' is not defined的直接原因是game.py文件中使用了Player类,但没有导入定义该类的player模块,除此之外你的代码还存在几处语法问题会导致后续运行报错,全部修复步骤如下:
具体修复步骤
- 在
game.py的导入语句区域新增导入行:from player import Player - 修正
game.py的缩进错误:Game类下的__init__、run方法必须整体缩进4个空格,Python对缩进敏感,未对齐会直接触发语法错误 - 修正
game.py中的HTML转义字符问题:把代码中的"替换为正常的英文双引号" - 修正
player.py中的方法名不匹配问题:__init__中调用的方法是get_image,但实际定义的方法名是get_imaged,需要统一二者命名,否则会触发属性找不到的错误 - (可选优化)在
player.py的get_image方法中添加image.set_colorkey((0,0,0)),可以去除玩家素材的黑色背景,显示效果更正常
修正后的代码示例
game.py
import pygame import pytmx import pyscroll from player import Player class Game: def __init__(self): # fenetre du jeu self.screen = pygame.display.set_mode((800, 800)) # 窗口大小 pygame.display.set_caption("Pygamon - By BenCorp") # 窗口标题 # 加载tmx地图 tmx_data = pytmx.util_pygame.load_pygame('map.tmx') map_data = pyscroll.data.TiledMapData(tmx_data) map_layer = pyscroll.orthographic.BufferedRenderer(map_data, self.screen.get_size()) #map_layer.zoom = 2 # 生成玩家实例 self.player = Player() # 绘制图层组 self.group = pyscroll.PyscrollGroup(map_layer=map_layer, default_layer=1) self.group.add(self.player) def run(self): # 游戏主循环 running = True while running: self.group.draw(self.screen) pygame.display.flip() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit()
player.py
import pygame class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.sprite_sheet = pygame.image.load('player.png') self.image = self.get_image(0, 0) self.rect = self.image.get_rect() def get_image(self, x, y): image = pygame.Surface([32, 32]) image.blit(self.sprite_sheet, (0, 0), (x, y, 32, 32)) image.set_colorkey((0,0,0)) # 去除黑背景 return image
main.py代码无问题,无需修改。
内容的提问来源于stack exchange,提问作者Flu
相关产品推荐
相关产品推荐

