Psychopy Codificatore: problemi che terminano un ciclo con risposta chiave

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

  •  21-12-2019
  •  | 
  •  

Domanda

Provo a eseguire un esperimento in cui la dimensione dello stimolo può continuare continuamente (su base fotogramma per fotogramma) essere modificata dal partecipante (ad es. Premendo / tenendo premuto Aumentare le dimensioni, il tasto down-riduce le dimensioni) e confermatousando il tasto ENTER.Ho scoperto che usare Key.StateHandle () da Pyglet è utile e fondamentalmente il mio codice funziona come previsto.Tuttavia, trovo che alcune "prove" vengono saltate.

Ecco il mio codice:

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()
.

Questa routine dovrebbe portare a 5 prove, ma alcune prove vengono saltate.Ecco la produzione prototipica:

1.36663
1.0 # this trial is skipped 
1.6666
2.23321
1.0 # this trial is skipped 
.

Ordinamento degli studi saltati è anche variabile.Ho ricevuto il problema su due computer diversi (Ubuntu / Windows 7).Ci sono errori ovvi nel mio codice o c'è qualche consiglio come codificare l'esperimento in un modo diverso?

È stato utile?

Soluzione

Penso che il problema sia che stai verificando se viene premuto il tasto ENTER, ma non se viene rilasciato prima di essere rilevato.I.e. Questo codice controlla una volta in ogni periodo di aggiornamento dello schermo per lo stato chiave.È possibile che il soggetto spinge immettere in risposta a una prova, ma poi quel tasto è ancora in basso quando l'immagine viene ripristinata alla sua dimensione originale e la prova successiva inizia.

È necessario tenere traccia se due rilevazioni di rilevamento dei tasti successivi sono dovute al tasto ENTER, senza che un periodo intermedio di nessuna chiave non viene premuto, oppure uno degli altri rilevati.Immagino che questo non sia necessario per gli altri due tasti, come vuoi rispondere continuamente a quelli continuamente, mentre i tasti entri dovrebbero essere trattati come eventi discreti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top