PsychoPy Codificador:Problemas final de um ciclo com chave de resposta
-
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?
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.