0

我在使用 psychtoolbox 和准确的时间时遇到问题。我按照网站上的教程和 PsychDocumentation 中的 PBTTutorial-ECVP2013.pdf 编写了我的代码。但不知何故,它仍然无法正常工作。翻转(超过 20 秒)所需的时间比应有的时间长(1 或 2 秒)。所以我想我在某个地方犯了一个严重的错误,但我找不到它。你能帮我写代码吗?

无论如何,这就是我的代码的样子。

%Number of seconds to wait (ns)
nsS = 2; %sentences
nsW = 1; %words
nsDot = 7;
nsWait= 3;
%Number of frames to wait (wf) before flipping 
wfS = round(nsS/ifi);
wfW = round(nsW/ifi);
wfDot = round(nsDot/ifi);
wfWait = round(nsWait/ifi);
vbl=Screen('Flip', window);


for i = 1:10 %1:exp.ntrials
    sentence = ...; %load sentences
    word = ...% load words;

    for iframe = 1:300
        %draw fixation cross
        if iframe <= 60
            DrawFormattedText(window, '+','center','center', white);
            vbl =Screen('Flip', window, vbl + (wfW-0.5)*ifi);
        %draw sentence
        elseif iframe <= 180
            DrawFormattedText(window, sentence,'center','center', white);
            vbl = Screen('Flip', window, vbl + (wfS-0.5)*ifi);
        %blank screen
        elseif iframe <= 240
            Screen('FillRect', window, black);
            vbl = Screen('Flip', window, vbl + (wfW-0.5)*ifi);
        %Draw word
        elseif iframe <=300
            DrawFormattedText(window, word,'center','center', white);
            vbl = Screen('Flip', window,vbl + (wfW-0.5)*ifi);
        end
    end

    %Draw dot
    for frames = 1:wfDot
        Screen('DrawDots', window, [xCenter yCenter], 10, white, [], 2);
        vbl=Screen('Flip', window, vbl+(wfDot-0.5)*ifi);%, vbl+(wfDot-0.5)*ifi);
        %WaitSecs(7);
    end
    ...
 end  
4

1 回答 1

0

看起来您可能正在使用“iframe”循环来迭代屏幕框架?Screen('Flip') 命令将等待在适当的时间呈现刺激,'iframe' 循环不是必需的,它是导致您的问题的原因。下面包含一个从您的代码修改的示例(我必须添加一些您的示例中未定义的内容)。不需要将代码包装在 try/catch 语句中,但是在出现错误时自动关闭屏幕很方便。

try
    window = Screen('OpenWindow', 0, 0);
    ifi = Screen('GetFlipInterval', window);

    %Number of seconds to wait (ns)
    nsS = 2; %sentences
    nsW = 1; %words
    nsDot = 7;
    nsWait= 3;
    %Number of frames to wait (wf) before flipping
    wfS = round(nsS/ifi);
    wfW = round(nsW/ifi);
    wfDot = round(nsDot/ifi);
    wfWait = round(nsWait/ifi);
    vbl=Screen('Flip', window);

    black = 0;
    white = 255;

    for i = 1:10 %1:exp.ntrials
        sentence = 'sentence here';
        word = 'word here';

        DrawFormattedText(window, '+','center','center', white);
        vbl =Screen('Flip', window, vbl + (wfW-0.5)*ifi);
        %draw sentence
        DrawFormattedText(window, sentence,'center','center', white);
        vbl = Screen('Flip', window, vbl + (wfS-0.5)*ifi);
        %blank screen
        Screen('FillRect', window, black);
        vbl = Screen('Flip', window, vbl + (wfW-0.5)*ifi);
        %Draw word
        DrawFormattedText(window, word,'center','center', white);
        vbl = Screen('Flip', window,vbl + (wfW-0.5)*ifi);

    end

    sca;

catch
    % close the screen on errors
    sca;
end
于 2017-03-21T19:16:15.907 回答