2010-07-04 79 views
0

我对python完全陌生(而且这已经有一段时间了,因为我编写了很多代码)。 我想调用一个方法,在一个小小的“你好世界”类游戏中充当事件处理程序,但它根本不起作用。我在OSX 10.6.3上使用pygames 1.9.1 lib和python 2.6.1。Python事件处理函数方法不能返回条件值

所以这是一个while循环:

 self.exitCheck()  

     if self.controlUpdate == True: 
      self.playerX += 1 

而且,这两个方法的问题是:

def exitCheck(self): 
    for event in pygame.event.get(): 
     if event.type == KEYDOWN: 
      if event.key == pygame.K_ESCAPE: 
       print "Escape pressed" 
       pygame.quit() 
       exit() 


def controlUpdate(self): 
    for event in pygame.event.get(): 
     if event.type == KEYDOWN: 
      if event.key == pygame.K_SPACE: 
       print "Spacebar pressed" 
       return True 
     elif event.type == KEYUP: 
      if event.key == pygame.K_SPACE: 
       print "Spacebar not pressed" 
       return False 
     else: 
      return False 

exitCheck总是,但controlUpdate似乎永远不会被调用,同时在有条件的。我觉得我已经从我经历过的python书籍(oreilly学习Python)中漏掉了一些东西,或者我已经花了很长时间从正确的编码中突破,但是是的。非常感谢帮助。

回答

1

编辑:问题是,pygame.event.get()两个返回和删除事件队列中的所有事件。这意味着每次调用controlUpdate()时,事件队列都将为空,并且不会执行for循环内的任何操作。

+0

是的。 pygame.event.get不会触发,但是如果我在for循环之前粘贴一个打印语句(_does_被触发)(现在想到了这一点).Oh,并且它不会在没有括号的情况下触发,所以那是步骤我的一个错误... for循环似乎根本没有触发。 – ReadyWater 2010-07-04 01:20:46

+0

你确定'pygame.event.get()'没有被触发吗?它可能被触发但没有任何事件。 – 2010-07-04 01:24:16

+0

啊,只是想通了。这是因为我打了两次。 exitCheck似乎清空了事件队列,所以在controlUpdate轮到它时没有什么可检查的。 感谢您的帮助。我只是要将这两种方法合并为一种,我没有意识到它是以这种方式工作的。 – ReadyWater 2010-07-04 01:27:05

3

难道你错过了一些括号吗?

if self.controlUpdate() == True: