等待用户按键



我正在做一个项目,我有一个视觉刺激,它由许多在屏幕上按特定方向移动的点组成,在刺激之后,用户需要按下两个键中的一个("q"或"w"(。

我希望用户被迫按键,也就是说:刺激(在特定方向上移动的点(播放固定的持续时间,然后停止(但点继续在随机方向上移动(,直到用户按下"q"或"w"为止。在用户最终按下一个键后,会有一个听觉反馈(正确或错误的答案(,刺激会再次播放。这种情况一直重复到试验结束。

我的问题是,如何在刺激后不停顿地强迫用户按键?因为如果我停顿一下,所有的点都会"冻结",而不是在等待答案时向不同/随机的方向移动。那么,我如何才能"永远/无限期"等待,直到用户按下键('q'或'w'(?

我的代码:

% present dots in random directions:
for frame = 1:ceil(maxRT*frameRate) %maxRT is 2 seconds
%calls function related to the drawing of the dots            
Screen('DrawingFinished', window1.h);
[flip.waitRT.VBL(block, trial, frame), ...
flip.waitRT.StimOns(block, trial, frame), ...
flip.waitRT.FlipTS(block, trial, frame), ...
flip.waitRT.Missed(block, trial, frame), ...
flip.waitRT.beampos(block, trial, frame)] = Screen('Flip', window1.h, TimingCnt);
TimingCnt = flip.waitRT.VBL(block, trial, frameNum) + window1.frameDur - window1.slack; 
[keyIsDown, secs, keyCode]  = KbCheck();
keypressed = KbName(keyCode);
if ischar(keypressed) && ~isempty(keypressed) && keyIsDown
%checks which key was pressed, compares pressed key with correct key to check if it's correct or wrong, calculates RT, plays auditory feedback
end
end

http://psychtoolbox.org/docs/KbWait

在while循环中使用KbWait函数,提供10ms的untilTime参数。如果keyCode有效,则中断并相应地继续。

伪代码示例:

isValid = false;
while ~isValid
% move dots randomly
[secs, keyCode, deltaSecs] = KbWait('untilTime', 0.01);
if (keyCode == 'q') || (keyCode == 'w')
isValid = true;
end
end
% do stuff

相关内容

  • 没有找到相关文章

最新更新