いきなり概念的な話から始まりますが、本来プログラムとは複雑な処理をまとめた手続きとしてその必要性が認められていったものと思われます。




そして次に、あらかじめ埋め込まれた情報のみならずデータの入力を可能にすることにより、汎用性やインタラクティビティといったものが発達していったのではないでしょうか。




もし入力を受け付けなければ紙芝居以上のものは作れない訳で、だからこそ昔の人は延々とパンチカードを通す作業をしてでも入力をしたわけですね。




もっとも、パンチカードで入力したのはプログラムのコードそのものだったとは思いますが。




 




前置きが長くなりましたが、今日はボタン入力についてです。





protected void keyPressed(int keyCode){

  int action = getGameAction(keyCode);

  if (action == Canvas.UP){

   //上を押された時の処理

  }else if (action == Canvas.RIGHT){

    //右を押された時の処理

  }




   //……

}




入力はkeyPressedで受け取ることになるでしょう。マルチスレッドならば、synchronized修飾子を必要とするかもしれません。




似たようなメソッドにkeyRepeatedがあった気がしますが、ゲームプログラミングをするなら、keyPressedやらに実際の処理を記述するのは得策ではありません。特にクラス数をなるべく削減したい携帯電話プログラミングならば、scene変数あたりでシーン変遷を管理すると思うので、メインループとボタンイベント時で二重にシーン管理が必要になってしまいます。更にサブ的なシーンの分け方(戦闘時かつアニメーション時や、移動時かつアニメーション時など)を行うならば、それを再現しなくてはならず非常に面倒なことになってきます。






keyPressedメソッドでは、あらかじめ用意したクラス内でのボタン用フラグ変数に押されたボタンの情報を保持しておき、メインループでその値を参照する、というのがいいと思われます。






しかし書いといて難ですが、同時に二つのボタンが押し下げられた時ってちゃんと二回呼ばれてくれるんですかね…?






あと個人的には、getGameActionって”Game”って名前が入ってるメソッド名が胡散臭くて嫌です。






さて、長くなってしまったので、実装例は明日にまわすことにしましょう…。