簡體   English   中英

Python中的多個計時器(Pygame)

[英]Multiple timers in Python (Pygame)

我是一名業余程序員。 我正在嘗試編寫一個簡單的程序來測量一系列用於生物學實驗的視覺刺激(正方形閃光)的反應時間。 這是我的代碼(注意,第一次編寫圖形界面):

stimulus = pygame.Rect(100,250,100,100)

#draw on surface object
time.sleep(2) #wait for 2 seconds before it appears
screen.fill(BLACK)
pygame.draw.rect(screen,WHITE,stimulus)
pygame.display.update(stimulus)

#record time stimulus appeared
t0 = time.clock()

#clear screen ("flash" illusion)
time.sleep(0.5) #***PROBLEM***
screen.fill(BLACK)
pygame.display.update(stimulus) 


while True:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            t1 = time.clock()
            print t1-t0
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

在我將包含標記為“問題”的行包含在塊之前,程序運行正常。 印刷的反應時間似乎合理。 但是,我希望廣場在一段時間后消失,就好像它只是“閃現”一樣。 包含time.sleep(0.5)后,打印時間不再正確。 無論我按多快,它總是0.5xxxx或更高。 有沒有解決方法?

PS我需要它消失,因為我想呈現一系列閃爍,其間有預定的(非常數)暫停。

謝謝。

編輯

我需要做兩件事:1。形狀必須在屏幕上閃爍0.5秒。 2.每次按下空格鍵時,程序必須創建一個時間戳(例如寫入列表)(即使在兩次閃爍之間隨機按兩次)。

您的問題是,由於您標記為問題的行,計算機將在0.5秒內不執行任何操作。 您需要做的是使它可以在正方形仍然顯示時注冊反應。 而不是time.sleep(0.5) ,把這個:

while time.clock()-t0<0.5:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            t1 = time.clock()
            print t1-t0

這應該修復你的代碼。

使用pygame.time.get_ticks()它給你,因為經過的毫秒pygame.init

編輯:

如果在首次顯示形狀時保存get_ticks值,那么每個keydown都會在列表中附加當前的get_ticks

for press in press_times:
    print "milliseconds: {}".format(press - time_start)

毫秒意味着500相當於0.5秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM