2013-11-22 45 views
0

我正在Python 2.7上編寫一個Pygame 1.9.2的實驗。在實驗中,我顯示一個圖像並要求用戶根據圖像的特徵點擊鼠標左鍵或鼠標右鍵(我預先指示什麼時候點擊它)。顯示圖像直至用戶單擊或圖像顯示時間超過固定時間。`pygame.mouse.get_pressed()`報告點擊鼠標沒有點擊

下面的代碼片段。(希望這一點就足以理解正在做什麼。)

pygame.display.update() 
resp = None 
while 1: 
    dispEnd = time.time() 
    pygame.mouse.set_visible(True)  
    pygame.event.get() 
    ms = pygame.mouse.get_pressed()    
    if ms[0] or ms[2]: 
     rt = dispEnd - dispSt     
     if ms[0]: 
      resp = 'Yes' 
     else: 
      resp = 'No' 
     break 
    if dispEnd - dispSt >= changeDuration: 
     break 

這段代碼是一個更大的環中的圖像選擇和顯示的一部分,所以這運行幾次。

在不可預知的時候會發生什麼,該程序不會等待用戶輸入。顯示圖像後立即進入while循環,並按照鼠標按下的方式繼續。

這是一個隨機錯誤,隨時都會發生;有時在程序開始時,從循環的第一次運行開始;所以可能不是因爲事件隊列可能沒有被清除(它在調用pygame.event.get()時),也不能默認以前的鼠標點擊;有時它會在循環的幾次迭代之後發生。無論如何,這對實驗來說是災難性的。

+1

它看起來像你調用'event.get()',然後就丟棄的結果。你不應該在做'if event.type == pygame.MOUSEBUTTONDOWN:'如果你想要檢測鼠標是否被按下的某處? – Kevin

+0

那麼,我正在使用'pygame.mouse.get_pressed()'來獲取被按下的鼠標按鈕。我在調用'pygame.mouse.get()',因爲文檔中提到「請注意,請記住調用pygame.event.get - 在此函數之前從隊列中獲取事件,否則它將無法工作。」而且,如果它沒有被調用,它就不起作用。 – radhanila

+0

顯示錯誤信息(引用) – furas

回答

1

嘗試了這一點:

... 
while 1: 
    dispEnd = time.time() 
    for event in pygame.event.get(): 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      #do something   
    ...