从另一个类中删除组中的精灵会生成未定义的错误名称

时间:2016-05-03 10:14:06

标签: python pygame

在游戏中你移动的是简单的blitted图像,没有步行动画或任何东西,并试图在开门的路上收集钥匙,最终逃离你所在的监狱。

当我试图“击中”掉落钥匙的守卫时,我遇到了一个问题。当我尝试从另一个类中定义的组中删除sprite时,它告诉我该项未定义。

追踪(最近的呼叫最后):
  文件“C:/ Users / - / Desktop / escapeprison / escape.py”,第329行,in     current_level.npcs.remove(NPC)
NameError:名称'npc'未定义

class Level(object):


    wall_list = None
    npcs = None

    def __init__(self):

        self.wall_list = pygame.sprite.Group()
        self.npcs = pygame.sprite.Group()



class Level1(Level):


    def __init__(self):

        super().__init__()

        #(x_pos, y_pos, width, height)
        #[x, y, width, height, color]

        npc = Npc(480, 40)
        npc.move = 0
        self.npcs.add(npc)
        walls = [[0, 0, 5, 500, WALL],
                 [0, 550, 5, 50, WALL],
                 [0, 0, 800, 5, WALL],
                 [0, 595, 800, 5, WALL],
                 [795, 0, 5, 600, WALL],

                 [390, 0, 5, 70, WALL],
                 [390, 120, 5, 150, WALL],
                 [390, 320, 5, 150, WALL],
                 [390, 520, 5, 80, WALL],

                 [550, 300, 5, 300, WALL],
                 [550, 300, 150, 5, WALL],
                 [750, 300, 50, 5, WALL],
                 [600, 380, 1, 150, WALL],
                 #Sellien väliseinät
                 [0, 195, 390, 5, WALL],
                 [0, 395, 390, 5, WALL]
                ]




        for item in walls:
            wall = Wall(item[0], item[1], item[2], item[3], item[4])
            self.wall_list.add(wall)

魔法应该发生在我的游戏循环中的类外面,如果我按空格它会检查我是否足够接近npc并且应该从列表中删除它

if player.rect.x >= 440 and player.rect.x <= 520 and player.rect.y >= 20 and player.rect.y <= 80:
                npc_scene = 1
                current_level.npcs.remove(npc)
                npc = Npc(480, 45)
                current_level.npcs.add(npc)

“可能还需要”

levels = []
level = Level1()
levels.append(level)

level = Level2()
levels.append(level)

current_level_no = 0
current_level = levels[current_level_no]

2 个答案:

答案 0 :(得分:0)

此异常表示解释器在您尝试使用它的代码部分中无法识别变量名npccurrent_level.npcs.remove(npc))。 为了使其可识别,您必须将其作为参数接收,或使其成为全局。

阅读python here中的变量范围。

答案 1 :(得分:0)

将一个碰撞检查方法添加到Level类并传入播放器rect,然后循环遍历npc组并测试它们是否接近。改变区域以获得所有通用的东西,然后每个级别只是墙壁和继承的npc代码,这样的东西? : -

else