ゲームプログラミングのはなし10
【ゲームプログラミングのはなし10】
ゲームプログラミングで入力のコードを書く時に、我々の日常感覚と異なる点は、
「ボタンが離れた時にも信号が出る」
というものでしょう。
ボタンを押した時に、「押されました」という意味で電気信号が出るのは、まあ当たり前ですが、指がボタンから離れてボタンが浮いた時にも信号が出るんです。これはスマホのタッチパネルも同じです。
このことを知らずに、素直にボタンやタッチパネルが押された時にアクションを起こすプログラムを書くと、押した時と離れた時と2回信号を受信してしまっているので、プログラマーの想定外のことが起こります。
シューティングゲームで弾が2発撃たれるのはあまり問題がないかもしれませんが、アクションゲームで大事なアイテムを2回使ってしまうと困りますよね?
さらに困ることは、RPGなどでメッセージが出た時に、タップを2回高速でしちゃっているのでメッセージが読めない、意図していないコマンドを実行してしまうなど、ゲームにならない事態に陥ります。
ですので、通常は「離れた時」の信号に反応するようにプログラミングします。指を離す時のほうが、人間は意思決定したと判断したほうがいい場合が多いのですね。
「押された時」ではなく、「離れた時」に反応するプログラムを書くということはなかなか気持ち悪いですよ。プログラマーのアタマの中では、ゲームを遊ぶプレイヤーがボタンを押す様子を描いていますから。
あ、例外的にこの現象を逆に活用した面白いケースがあります。「ストリートファイター」の必殺技のコマンド入力で、メチャクチャ短時間に長いコマンドを入力しないといけない場合に、ボタンを押した時に通常技を出して、次の瞬間コマンド入力し、さっきのボタンを離した時点でコマンド成立で必殺技が出る、というものです。。ザンギエフの小足当ててスクリューなどで活用される方も多いのではないでしょうか。え?しませんか?
ちなみに、iOSのプログラミングでは、スクリーンへのタッチが「開始」「ドラッグ中」「終了」と最初から信号を分別してくれているので、「開始」か「終了」かどちらかに反応するようにコードを書けばうまくいきます。