0

私は MATLAB で psychtoolbox を使用しています。参加者に一連の画像の歪みを 0 ~ 9 で評価してもらいたいと考えています。GetChar を使用してみましたが、スクリプトを実行すると、ユーザーの応答を待たずに次の画面に移動します。これを修正する方法について何かアドバイスはありますか?

%using a loop to show images
for k=1:290
texture1(k)=Screen('MakeTexture',w,images{k});    
end
for k=1:145
Screen('DrawTexture',w, texture1(k), [], leftposition);
Screen('DrawTexture',w, texture1(k+145), [], rightposition);
Screen('DrawLines', w, allCoords,...
lineWidthPix, black, [xCenter yCenter], 2);
Screen(w,'Flip');
pause(0.2);
end


%rating text
DrawFormattedText(w,'Rate distortion 0-9','center','center',[255 255  255]);
Screen(w,'Flip');
GetChar();


%press space to finish
DrawFormattedText(w,'press space to finish','center','center',[255 255 255]);
Screen(w,'Flip');


% Wait for a key press
KbStrokeWait;

% Clear the screen
sca;
4

1 に答える 1

0

ここでいくつかのことが行われています: ループが終了した後にキーが押されたことだけを探しており、キーを押した結果を保存していません。

GetCharも乱雑です (おそらく、キューをクリアするために呼び出したいと思うFlushEventsか、または (からhelp GetChar) に遭遇する可能性があります:

GetChar を呼び出す前に文字が入力された場合、GetChar はすぐにその文字を返します。

1 つの代替方法を以下の例に示します。これはKbWait、非常によく似た機能を提供する を使用しますが、もう少し作業が必要です (つまり、キー コードを char に変換します)。さらに、キー チェック間に 5 ミリ秒の遅延を実装しているため、偶発的なキー バウンス (1 回の押しを複数回の押しとしてカウント) を防ぐことができます。

この例では、左上隅に小さなウィンドウを開き、現在のループの繰り返しを画面の中央に表示し、1 回押すと続行するのを待ちます。また、キーを押した回数も に記録しtimesます。

Screen('Preference', 'SkipSyncTests', 2);
[win, rect] = Screen('OpenWindow', 0, [0 0 0], [15 15 400 400]);
Screen('TextSize', win, 20);

answers = cell(1, 5);
times = zeros(1, 5);
ref_time = GetSecs;

for ii = 1:5
    DrawFormattedText(win, num2str(ii), 'center', 'center', [255 255 255]);
    Screen(win, 'Flip');
    [times(ii), key_code] = KbWait;
    answers{ii} = KbName(find(key_code));
    WaitSecs(0.1); %# Wait an extra 100ms for better debouncing
end

times = times - ref_time;

sca;
于 2016-07-13T23:01:25.900 に答える