0

私はアマチュア プログラマーです。生物学実験に使用される一連の視覚刺激 (正方形のフラッシュ) の反応時間を測定する簡単なプログラムを作成しようとしています。これが私のコードです(グラフィカルインターフェイスを初めてコーディングすることに注意してください):

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 間に所定の (一定ではない) 一時停止を入れた一連のフラッシュを提示したいので、それを消す必要があります。

ありがとう。

編集

2 つのことを達成する必要があります。 1. 図形が画面上で 0.5 秒間点滅する必要があります。2. プログラムは、スペースバーが押されるたびにタイムスタンプを作成する必要があります (リストへの書き込みなど) (2 回のフラッシュの間にランダムに 2 回押された場合でも)。

4

2 に答える 2

1

問題は、問題としてマークした行が原因で、コンピューターが 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

これでコードが修正されます。

于 2012-11-17T15:27:06.787 に答える
1

から経過したミリ秒を取得するを使用pygame.time.get_ticks()しますpygame.init

編集:

形状が最初に表示されたときに値を保存するget_ticksと、すべてのキーダウンが現在のリストに追加されますget_ticks

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

ミリ秒を意味する 500 は 0.5 秒に相当します。

于 2012-11-17T20:35:08.653 に答える