精神型コーダー:キー応答を持つループの終了の問題

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

  •  21-12-2019
  •  | 
  •  

質問

刺激サイズが連続的に(フレームごとに)継続的に(フレームごとに)変更することができる実験を実行しようとしています(すなわち、上げ/鍵が大きくなるサイズが大きくなり、サイズが小さくなります)ことが確認されました。Enter-Keyを使用しています。PygletからKey.StateHandle()を使用することが役立つと基本的に私のコードが意図したとおりに機能することがわかりました。しかし、私はいくつかの「試験」がスキップされていることがわかりました。

これは私のコードです:

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 
.

スキップされた試行の順序も可変です。私は2つの異なるコンピュータ(Ubuntu / Windows 7)で問題を受け取りました。私のコードに明らかなエラーはありますか、それともさまざまな方法で実験をどのようにコーディングする方法もありますか?

役に立ちましたか?

解決

問題はあなたがEnterキーが押されたかどうかをチェックしているが、それが再び検出される前に解放されるかどうかではないという問題があると思います。すなわち、このコードは、キー状態のスクリーンリフレッシュ期間ごとに1回チェックする。1回の試行に応答して、被験者が入力する可能性がありますが、そのキーが元のサイズにリセットされ、次のトライアルが始まります。

2つの連続したキープレス検出がENTERキーが原因であるかどうかを追跡する必要があります。キーを押すか、または他のいずれかのうちの1つが検出されないか、またはその1つが検出されます。私はこれが他の2つのキーに必要ではないと思いますが、あなたが継続的にそれらに対応するように、Enter Keysは離散的なイベントとして扱われるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top