KbWait

[secs, keyCode, deltaSecs] = KbWait([deviceNumber][, forWhat=0])

いずれかのキーが押されるまでKbWaitを呼び出したところでプログラムは止まります。KbCheckと同様に、キーを押したときの時間を秒単位で、キーの状態をkeyCodeとして返します。すべてのキーが押されていないことを確認し、1つのキーが押されるのを待ちます。

注意点

KbWaitは周期的にキーの状態をチェックします。ある時点でキーが押されていなければ、5ms 待ってからもう一度キーが押されたかをチェックします。これはシステムへの負荷を避けるためです。

以上の理由から、KbWaitで測定した反応時間には、少なくとも5msの誤差が含まれていることになります。

KbCheckのdeltaSecsに関する説明も参考にしてみてください)

KbWaitが正しく動いていない場合は、"stuck keys"と呼ばれる不具合が生じている可能性があります。

これについては以下の2つのヘルプを見てください。

help DisableKeysForKbCheck

help RestrictKeysForKbCheck

(「2.6.2 キーボード入力」も参考にしてみてください)

GetChar と CharAvail コマンドは、入力された文字を重視していて動作が遅く、KbCheck と KbWait はキー押しを重視していて動作が速いです。

MatlabのコマンドウィンドウでKbWaitの動作を確認するときは注意が必要で、KbWaitの後に押したエンターキーに対してすぐに反応してしまうでしょう。KbWaitをテストするには、

WaitSecs(0.2);KbWait

としてみてください。

KbWaitはキーを押すタイミングではなく、キーを離す タイミングを測ることもできます。このような動作をしたいときは引数forWhatを1にしてください。

KbWaitであるキーを押したときの反応を取得するには、引数forWhatを2にしてください。このときKbWaitはすべてのキーが押されていないことを確認して、キー入力を待ちます。

具体的には次のようにします。

KbWait([], 2);

このときはキーを押したらすぐにKbWaitの次の行にプログラムが進むことに注意してください。

引数forWhatが3のときは、あるキーが押されてそのキーが離されるまで待ちます。

つまり、次のような流れになります。

  1. すべてのキーが押されていないことを確認する
  2. あるキーの入力を待つ
  3. すべてのキーが押されていないことを確認する
  4. 押したキーの情報を返す