PsychoPy Codificador:Problemas final de um ciclo com chave de resposta

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

  •  21-12-2019
  •  | 
  •  

Pergunta

Eu tento executar um experimento no qual o estímulo tamanho pode continuamente (em um quadro-a-quadro base) ser alterado pelo participante (i.e.premir/, segurando-chave aumenta de tamanho, para BAIXO-chave diminui de tamanho) e confirmado com ENTER.Achei que usando a Chave.StateHandle() a partir de pyglet é útil e, basicamente, o meu código funciona como pretendido.No entanto, acho que alguns "ensaios" são ignorados.

Aqui é o meu código:

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

Esta rotina deve conduzir a 5 ensaios, mas alguns ensaios são ignorados.Aqui é prototípico de saída:

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

Lá, a fim de ignorados ensaios também é variável.Recebi o problema em dois computadores diferentes (Ubuntu/Windows 7).Existem erros óbvios no meu código, ou existe algum conselho de como o código da experiência em uma forma diferente?

Foi útil?

Solução

Eu acho que o problema é que você está verificando se a tecla enter é pressionado, mas não quer que ele seja lançado antes de ser detectado novamente.i.e.este código verifica se uma vez em cada período de atualização de tela para o estado da tecla.É possível que o sujeito empurra entrar em resposta a um julgamento, mas, em seguida, a chave é ainda baixo quando a imagem é reposta ao seu tamanho original e o próximo julgamento começa.

Você deve acompanhar se duas sucessivas tecla detecções são devido a tecla enter, sem um período de intervenção de nenhuma tecla está sendo pressionada, ou um dos outros e ser detectado.Eu acho que isso não é necessário para as outras duas chaves, como você deseja responder a essas continuamente, enquanto enter chaves devem ser tratados como eventos discretos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top