Codeur psychopique: problèmes de fin d'une boucle avec une réponse clé

StackOverflow https://stackoverflow.com//questions/25037926

  •  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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top