2010-07-04 98 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: