Codeur psychopique: problèmes de fin d'une boucle avec une réponse clé
-
21-12-2019 - |
Question
J'essaie de faire fonctionner une expérience dans laquelle la taille de stimulus peut être modifiée en continu (sur une base de trame par cadre) par le participant (c'est-à-dire que vous appuyez sur la taille de la taille de la touche de maintien de la touche, la taille de la touche DOWN diminue) et confirmée.en utilisant la touche Entrée.J'ai trouvé que l'utilisation de Key.StateHandle () de Pyglet est utile et, fondamentalement, mon code fonctionne comme prévu.Cependant, je trouve que certains "essais" sont ignorés.
Voici mon code:
from psychopy import visual, core, event
from pyglet.window import key
win = visual.Window([1280,1024], fullscr=False, units='deg',monitor='testMonitor',winType='pyglet')
keyState=key.KeyStateHandler()
win.winHandle.push_handlers(keyState)
myCircle = visual.Circle(win,edges=128,radius=2.5,lineColor='black',fillColor='black',units='deg')
myCircle2 = visual.Circle(win,edges=128,radius=2.5,lineColor='black',fillColor='black',units='deg')
response=0
for i in range(5):
sizeIni=1.0
myCircle2.setRadius(sizeIni)
myCircle2.setPos([0.0, -10.0])
event.clearEvents()
response=0
while response <> 1:
response=None
if keyState[key.UP]:
sizeIni=sizeIni+0.03333
if sizeIni>=10.0:
sizeIni=10.0
myCircle2.setRadius(sizeIni)
response=0
elif keyState[key.DOWN]:
sizeIni=sizeIni-0.03333
if sizeIni<=1.0:
sizeIni=1.0
myCircle2.setRadius(sizeIni)
response=0
elif keyState[key.ENTER]:
size=sizeIni
print size
response=1
elif keyState[key.ESCAPE]:
core.quit()
size=sizeIni
myCircle.draw()
myCircle2.draw()
win.flip()
Cette routine devrait conduire à 5 essais, mais certains essais sont ignorés.Voici la sortie prototypique:
1.36663
1.0 # this trial is skipped
1.6666
2.23321
1.0 # this trial is skipped
Là, l'ordre des essais sautés est également variable.J'ai reçu le problème sur deux ordinateurs différents (Ubuntu / Windows 7).Y a-t-il des erreurs évidentes dans mon code ou y a-t-il des conseils comment coder l'expérience d'une manière différente?
La solution
Je pense que le problème est que vous vérifiez si la touche Entrée est enfoncée, mais non si elle est publiée avant d'être détecté à nouveau.C'est-à-dire que ce code vérifie une fois dans chaque période d'actualisation de l'écran pour l'état clé.Il est possible que le sujet appuie entrer en réponse à un essai, mais cette clé est toujours en bas lorsque l'image est réinitialisée à sa taille d'origine et que le prochain essai commence.
Vous devez suivre si deux détections de presse de touches successives sont dues à la touche Entrée, sans une période intermédiaire de non aucune touche, ni l'une des autres détectées.Je suppose que cela n'est pas nécessaire pour les deux autres clés, comme vous le souhaitez en permanence, alors que les clés d'entrée sont censées être traitées comme des événements distincts.