Психолого-кодер: Проблемы, заканчивающие петлю с ответом ключа

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Я стараюсь запустить эксперимент, в котором размер стимула может непрерывно (на основе рамок) быть изменен у участника (то есть нажатие / удерживающую клавишу увеличения размера, уменьшается размер, уменьшается) и подтверждениспользуя клавишу Enter.Я обнаружил, что использование Key.StateHandle () от Pyglet полезно и в основном мой код работает как предназначено.Тем не менее, я считаю, что некоторые «испытания» пропущены.

Вот мой код:

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

Эта рутина должна привести к 5 испытаниям, но некоторые испытания пропускаются.Вот прототипы выхода:

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

Там приказ пропущенных испытаний также является переменным.Я получил проблему на двух разных компьютерах (Ubuntu / Windows 7).Есть ли какие-либо очевидные ошибки в моем коде, или есть какие-либо советы, как по-другому кодировать эксперимент?

Это было полезно?

Решение

Я думаю, что проблема в том, что вы проверяете, нажата ли нажата клавишу ввода, но не выпущено ли она, прежде чем быть снова обнаруженным.I.e. Этот код один раз проверяет один раз в каждом периоде обновления экрана для ключевого состояния.Возможно, что предмет нажимает в ответ в ответ на одно испытание, но тогда этот ключ все еще находится вниз, когда изображение сбрасывается до его первоначального размера, и начинается следующее испытание.

Вы должны отслеживать, будут ли два последовательных обнаружения ключей прессы обусловлены ключом ввода, без нажатия промежуточного периода либо нажатия ключа, либо одному из обнаруживаемых остальных.Я предполагаю, что это не нужно для двух других ключей, так как вы хотите реагировать на эти непрерывно, тогда как ввода ключей должны рассматриваться как дискретные события.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top