2013-03-06 54 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

相关问题