我在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;
答案 0 :(得分:0)
这里有一些事情:你只是在你的循环完成后才找到按键,而你没有存储按键的结果。
GetChar
也很混乱(您可能希望调用FlushEvents
清除队列,或者您可能遇到(来自help GetChar
):
如果在调用GetChar之前输入了一个字符,那么GetChar将会输入 立即归还那个角色。
以下示例演示了一种替代方案。它使用KbWait
,它提供了非常相似的功能,还有一些工作(即将密钥代码转换为字符)。此外,它在按键检查之间实现了5ms的延迟,这有助于防止意外的按键弹跳(将单次按下计为多次按下)。
此示例在左上角打开一个小窗口,在屏幕中央显示当前循环迭代,并等待单次按下继续。它还会在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;