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);