KbCheckの注意点

以下に記すのはKbDemoの中の

function KbDemoPart1

をちょっと変更したものです。

このプログラムではKbCheckが4回呼ばれています。

KbCheck1から3は必須ですが、KbCheck4があるとキー押しを正しく検出できなくなります。

プログラムの作成時につまづいたので、覚書として残しておきます。

KbCheck4があるとうまくいかないのは、KbCheck2(またはKbCheck3)とKbCheck4の間に何かのキーが押されると、

その情報はKbCheck2では検出できないため(だと思う)。

function keytest2
clearall;
ListenChar(2);
KbName('UnifyKeyNames');
%myKeyCheck;
while KbCheck; end % どのキーも押されていないことを確認。(KbCheck1)
while 1
    % キーの状態をチェック
    [ keyIsDown, seconds, keyCode ] = KbCheck; %(KbCheck2)
    if keyIsDown
        fprintf('You pressed key %i which is %s\n', find(keyCode), KbName(keyCode));
        if keyCode(KbName('ESCAPE'))
            break;
        end
     
        while KbCheck; end % 1回のキー押しに対して、fprintfが1回呼ばれるためにはこれが必要。 (KbCheck3)
    end
    %while KbCheck; end % ここのKbCheckは不要。これがあるとキー押しを正しく検出できない。 (KbCheck4)
end
ListenChar(0);