簡體   English   中英

pygame-錯誤對象不可調用

[英]pygame - error object not callable

我遇到問題的代碼如下。 有人可以幫我弄清楚如何解決此錯誤嗎? 我想做的是,這樣當我單擊開始游戲時,它將在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()

問題是您的全局變量run正與run功能混淆:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM