GetChar没有等待回应

时间:2016-06-16 13:12:35

标签: matlab getchar psychtoolbox

我在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;

1 个答案:

答案 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;