同時押下時の無効化処理
本項で既に述べた様に、キー入力は1つの変数でその総てを管理しています。
getKeypadState()
具体的にはこのメソッドが返す値です。
さて、この値には1つ、致命的な弱点があります。それは"3つ以上の同時押下を覚えられない"というものです。
例えば以下の様な条件式を組んだとします。
if ((nKS & 1 << Display.KEY_1) != 0) &&
    (nKS & 1 << Display.KEY_2) != 0) &&
    (nKS & 1 << Display.KEY_3) != 0)) {
  flag = true;
}
これは1、2、そして3キーが同時に押下されている場合はflagにtrueを代入するという文です。
一見問題が無い様に見えますが、実際はこのif文が成立する事は決してありません。それは、getKeypadState()が覚えられる押下は一度に最大2つ迄とされているからです。
本例の様に3つ以上同時押ししたとしても、先に押された2つ迄しか受け付けられないのです。
ユーザが3つ同時押ししても、その"同時"とは真の意味での同時ではありません。1ms単位で見てみると、必ず後先はあります。
実機ではその後先を敏感に受け取って、先に押された2つ以外は排他的に受け付けません。
もし、1msもズレずに入力を行ったとしてもやはり同じ結果です。その場合は番号の若い順から優先的に受理されます。
解決法・・つまり3つ以上の押下を受理させる方法は、今の所ありません。
操作中に3つ以上の押下が必要な箇所を設けない事で対処する他無いでしょう。
inserted by FC2 system