2013-03-06 1 views
0

Le code avec lequel j'ai des problèmes est ci-dessous. Quelqu'un peut-il m'aider à comprendre comment corriger cette erreur? J'essaie de faire est que lorsque je clique sur start game, il appelle la ligne dans main() sous l'instruction if.pygame - objet d'erreur non appelable

Erreur:

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 

code:

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() 

Répondre

3

Le problème est que votre variable globale run est de se confondre avec la fonction run:

def run(): 
    global run 
    run = True 
    pass 

Cela signifie que lorsque vous essayez pour appeler run():

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

il essaie d'appeler la variable booléenne. Pour le réparer, renommez la variable globale is_running ou renommez la fonction start_running.

+0

ok cela corrigé l'erreur mais maintenant quand je l'exécute rien ne se passe il se trouve juste là au lieu d'exécuter la fonction, et quand je quitte je reçois une erreur disant "système vidéo non initialisé" – user1758231

+0

@ user1758231: Cela ressemble à un complètement erreur sans rapport. Vous devriez essayer de le déboguer, et si vous ne pouvez pas le comprendre, vous pouvez ouvrir une nouvelle question. (Mais au cas où - à quoi ressemble votre nouvelle fonction 'run', et la nouvelle ligne' makeMenu'?) –

+0

Je l'ai compris! Donc, peu importe, merci quand même! – user1758231