2013-03-06 80 views
0

我遇到問題的代碼如下。有人可以幫我弄清楚如何解決這個錯誤?我試圖做的是,當我點擊開始遊戲時,它會在if語句下的main()中調用該行。pygame - 錯誤對象不可調用

錯誤:

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

回答

3

的問題是,你的全局變量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

+0

確定,修正了錯誤,但現在當我運行它時,沒有任何反應,它只是坐在那裏,而不是運行該功能,當我退出時,我得到一個錯誤,說「視頻系統未初始化」 – user1758231 2013-03-06 04:43:15

+0

@ user1758231:這聽起來像一個完全無關的錯誤。你應該嘗試調試它,如果你不能解決它,你可以打開一個新的問題。 (但是,以防萬一,你的新'run'函數看起來像什麼,新的'makeMenu'行?) – 2013-03-06 04:44:05

+0

我想通了!所以沒關係,謝謝! – user1758231 2013-03-06 04:53:04

相關問題