psychtoolbox吧 关注:123贴子:224
  • 1回复贴,共1

psychtoolbox获取按键KbGet

只看楼主收藏回复

复制以下内容后保存成KbGet.m,放在实验程序文件夹下
========================================
function [secs key] = KbGet(limit, varargin)
%[secs key] = KbGet([limit])
%获取一个按键,并返回得到这个按键时的时间
%可以设置limit来限制按键反应时间,超时则返回key = 0
%精度比KbStrokeWait高
%author: zbg 2015-2
if nargin == 0
limit = inf;
end
[keyIsDown, oldsecs, oldkeyCode, deltaSecs] = KbCheck;
x = [];
while numel(x) == 0
[keyIsDown, secs, keyCode, deltaSecs] = KbCheck;
x = find(keyCode > oldkeyCode);
oldkeyCode = keyCode;
if secs - oldsecs > limit
key = 0;
return
end
end
key = x(1);
end


IP属地:云南1楼2015-02-20 20:50回复
    %以下是一个使用例程,可以显示出按下的按键和时间间隔
    %原文 http://my.oschina.net/u/1387924/blog/379421
    KbName('UnifyKeyNames');
    Screen('Preference', 'SkipSyncTests', 1);
    [winPt, winRect]=Screen('OpenWindow',0,175, [500 300 800 370]);
    keyUp = KbName('UpArrow');
    keyDown = KbName('DownArrow');
    keyLeft = KbName('LeftArrow');
    keyRight = KbName('RightArrow');
    lastsecs = 0;
    key = 0;
    disp_txt = '';
    Screen('DrawText',winPt,'随便玩,按esc退出',0,0,0);
    Screen('Flip',winPt);
    while key ~= KbName('Escape')
    [secs, key] = KbGet();
    if key == keyUp
    disp_txt = '上';
    elseif key == keyDown
    disp_txt = '下';
    elseif key == keyLeft
    disp_txt = '左';
    elseif key == keyRight
    disp_txt = '右';
    elseif key ~= 0
    disp_txt = ['你按下了' num2str(KbName(key))];
    end
    Screen('DrawText',winPt,disp_txt,0,0,0);
    time = secs - lastsecs;
    Screen('DrawText',winPt,['距离上次按键' num2str(time) '秒'],0,24,0);
    Screen('Flip',winPt);
    lastsecs = secs;
    end
    Screen('CloseAll');


    IP属地:云南2楼2015-02-21 13:00
    回复