0
私はPygameで反応時間テスターを作ろうとしていますが、試行ごとのタイマーは0を表示しています。画面が赤色のとき、下キーを押すと時間が記録されます。私は、イベントループが実際にどのように動作するかを理解するのに苦労しているので、タイマーを配置する場所を正確にはわかりません。Pygameのタイマーが同じ値を表示
import pygame, sys
import random
from random import randint
import time
from time import sleep
from pygame.locals import *
FPS = 30
fpsClock = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Test')
WHITE = (255, 255, 255)
RED = (255, 0, 0)
y = False
x = 0
while True:
if y is False:
y = True
DISPLAYSURF.fill(WHITE)
start = time.time()
sleep(randint(1,3))
else:
y = False
DISPLAYSURF.fill(RED)
time.sleep(2)
for event in pygame.event.get():
if x < 5:
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if y is True:
end = time.time()
print(end - start)
x += 1
else:
pygame.quit()
sys.exit()
pygame.display.update()
fpsClock.tick(FPS)
time.sleep()
せずにそれが動作します私はコードを実行し、画面が赤色である間にキーを押すと、画面が赤色だった時間のプリントアウトを取得します。おそらく 'sleep(randint(1,3)) 'のために、1秒から3秒の間に非常に近い秒数です。したがって、ユーザーよりも赤/白のサイクルに時間がかかるように見えます。 – roganjoshはい、まさにその意図です。私はちょうど画面の赤とキーを押す間の時間ではなく、色の間の移行をタイミングだと分かったので、私は別の場所にタイマーを置く周りに遊んだが、私は欲しい結果を得ていない。 – Perplexityy
私は 'pygame'に慣れていませんが、これはスレッディングが必要だと思います。 'time.sleep()'はブロックされているので、シングルスレッドの実行では、いつも赤い画面をどれくらい長く持続させるかに時間がかかると思います。 [This](http://inventwithpython.com/blog/2013/04/22/multithreaded-python-tutorial-with-threadworms/)はかなり深みがあり、この問題のために過度のものかもしれませんが、いくつかの参考になるかもしれません。 – roganjosh