【问题标题】:pygame - error object not callablepygame - 错误对象不可调用
【发布时间】:2013-02-20 18:05:42
【问题描述】:

我遇到问题的代码如下。有人可以帮我弄清楚如何解决这个错误吗?我正在尝试使当我单击开始游戏时,它会在 if 语句下调用 main() 中的行。

错误:

    Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/untitled/Game.py", line 122, in <module>
    main()
  File "C:/Users/Administrator/PycharmProjects/untitled/Game.py", line 75, in main
    controller = Manager(screen)
  File "C:/Users/Administrator/PycharmProjects/untitled/Game.py", line 23, in __init__
    self.go_to(TitleMenu(screen))
  File "C:/Users/Administrator/PycharmProjects/untitled/Game.py", line 47, in __init__
    self.main_loop()
  File "C:/Users/Administrator/PycharmProjects/untitled/Game.py", line 54, in main_loop
    self.menu.update(events)
  File "C:\Users\Administrator\PycharmProjects\untitled\menumaker.py", line 46, in update
    self.options[self.option][1]()
  File "C:/Users/Administrator/PycharmProjects/untitled/Game.py", line 38, in <lambda>
    self.menu = makeMenu(["START GAME", lambda: run()], ["CONTROLS", lambda: Help(screen)], ["QUIT GAME", sys.exit])
TypeError: 'bool' object is not callable

代码:

class Manager(object):
    def __init__(self, screen):
        self.go_to(TitleMenu(screen))

    def go_to(self, scene):
        self.scene = scene
        self.scene.manager = self
#////////////////End Manager//////////////#
def run():
    global run
    run = True
    pass

#////////////////Title Menu and End Menu//////////////#
class TitleMenu(object):
    def __init__(self, screen):
        self.screen = screen
        self.menu = makeMenu(["START GAME", lambda: run()], ["CONTROLS", lambda: Help(screen)], ["QUIT GAME", sys.exit])
        self.menu.set_highlight_color((255, 0, 0))
        self.menu.set_normal_color((255, 255, 255))
        self.menu.center_at(300, 400)
        self.titleBackground = pygame.image.load("titleBackground.png")
        self.clock = pygame.time.Clock()
        events = pygame.event.get()
        self.menu.update(events)
        self.menu.draw(self.screen)
        self.main_loop()
        self.run = False

    def main_loop(self):
        while 1:
            self.clock.tick(60)
            events = pygame.event.get()
            self.menu.update(events)
            for e in events:
                if e.type == QUIT:
                    pygame.quit()
                    return

            self.menu.draw(self.screen)
            pygame.display.flip()

    def go_(self):
        self.manager.go_to(GameLevel(0))

class EndMenu(object):
    pass
#////////////////End Title Menu and End Menu//////////#

def main():
    globals()
    pygame.init()
    screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
    pygame.display.set_caption("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
    controller = Manager(screen)
    timer = pygame.time.Clock()
    running = True

    while running:
        timer.tick(60)
        if pygame.event.get(QUIT):
            running = False
            return

        controller.scene.handle_events(pygame.event.get())
        controller.scene.update()
        controller.scene.render(screen)
        pygame.display.flip()

        if run:
            controller.scene.go_()

    return Rect(left, bottom, width, height)

if __name__ == "__main__":
    main()

【问题讨论】:

    标签: python class pygame typeerror


    【解决方案1】:

    问题是您的全局变量 runrun 函数混淆了:

    def run():
        global run
        run = True
        pass
    

    这意味着当你尝试调用run():

        self.menu = makeMenu(["START GAME", lambda: run()], ["CONTROLS", lambda: Help(screen)], ["QUIT GAME", sys.exit])
    

    它尝试调用布尔变量。要修复它,请将全局变量重命名为 is_running,或将函数重命名为 start_running

    【讨论】:

    • 好的,修复了错误,但是现在当我运行它时,它什么也没有发生,它只是坐在那里而不是运行该函数,当我退出时,我收到一条错误消息,提示“视频系统未初始化”
    • @user1758231:这听起来像是一个完全不相关的错误。您应该尝试调试它,如果您无法弄清楚,您可以打开一个新问题。 (但以防万一——你的新 run 函数是什么样的,以及新的 makeMenu 行?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2023-03-03
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多