ひっきぃのメモ帳

趣味で作るプラモデル製作の過程と作品、日々の資格取得へ向けての活動、Apple中心のIT関連ネタを書いています。

[]第7回 キー操作で動かす

 ここまでの iアプリ はただ画面に表示するだけのつまらないものでした。第7回ではいよいよキー操作で少し動きのある iアプリ を作ってみましょう。

 

 とはいえ、いきなり最初から全てのプログラムを書き始めるのは大変なので、最初に作った Hello アプリを改造していきましょう。

 

元のサンプルにも、一部キー操作に関する部分があります。

左ソフトキーでプログラムが終了するようになってます。


public void processEvent(int type, int param) {

       if (type == Display.KEY_RELEASED_EVENT) {         


 if (param == Display.KEY_SOFT1) {


(IApplication.getCurrentApp()).terminate();

}

        }


}

 

   type は イベントの種類です。 Display.KEY_RELEASED_EVENTというのが、キーを離した時というイベントです。他にも、Display.KEY_PRESSED_EVENT というのもあります。こちらは、キーを押した時に発生します。どちらでも、キーを押した時に動きますが、どちらかというとキーを離した時に動作したほうが自然です。

 



 イベントの種類を判定したら、次はその内容を判定します。param にはその内容を示す値が入っています。キー操作の場合は、どのキーが押されたかを表します。このサンプルでは、Display.KEY_SOFT1というのが、左のソフトキーを表しています。

他にも、

Display.KEY_SOFT2 (右ソフトキー) 

Display.KEY_1  (1キー) 

Display.KEY_LEFT (左キー)  

等、キーの種類によって様々あります。

 

 でも、これってどうやって調べるの?ということになると、いろいろと発売されている解説本にも書いてありますが、正確なものを調べるならここにある技術文書を調べましょう。

iアプリコンテンツ開発ガイド for DoJa-5.1 APIリファレンス編


 この中から、Display というクラスを調べると、どのキーがどんな書き方になるかを全て調べることができます。

 少しJava
の勉強をしないと意味不明なところもありますが、ちゃんと作るならここに書いている内容は必須となります。

 

変更点はつづきで…

改造1 表示位置を変数にする


 この部分が表示する命令

 g.drawString("Start IApplication",


Display.getWidth() / 4, Display.getHeight() / 2);




表示場所が、

x()方向  Display.getWidth() / 4  画面の1/4の位置 ,

y()方向  Display.getHeight()
/ 2
  画面の 1/2の位置

になっていますが、


   g.drawString("Start
IApplication", x, y);


として、変数 x y の場所に表示するようにします。

 

この変数が何者かを説明しておかなければいけませので、

             

int x = Display.getWidth() / 4;

int y = Display.getHeight() / 2;

            

として、MainCanvasの中に書いておきましょう。

 

改造2 方向キーで変更する

 この変数を方向キーが押された時に変わるようにします。

           
if( param == Display.KEY_LEFT) { // 左キーが押されたら

           
       x--;                       // x
を減らす

           
}

         

if( param == Display.KEY_RIGHT) { // 右キーが押されたら          


      x++;                         // xを増やす           
}


if( param == Display.KEY_UP) { // 上キーが押されたら           


       y--;                       // yを減らす


}

           
if( param == Display.KEY_DOWN) {
 // 下キーが押されたら

           
       y++;                       // y
を増やす           
}

 

 

改造3 再描画

 変数の値を変更しただけでは、表示画面に反映されません。変更した内容で再描画の命令を、押した時の処理の最後に記述します。

  repaint();

 

完成したプログラム

 MainCanvasの完成版です。

class MainCanvas extends Canvas {
     int x = Display.getWidth() / 4;
     int y = Display.getHeight() / 2; 
     MainCanvas() {
      setSoftLabel(SOFT_KEY_1, "END"); 
     setBackground(Graphics.getColorOfName(Graphics.BLUE));
     }
    public void paint(Graphics g) {
       g.lock();
       g.clearRect(0, 0, Display.getWidth(), Display.getHeight());
       g.setColor(Graphics.getColorOfName(Graphics.WHITE));
       g.drawString("Start IApplication", x, y);
       g.unlock(true);
    }  
  public void processEvent(int type, int param) {
      if (type == Display.KEY_RELEASED_EVENT) {
          if (param == Display.KEY_SOFT1) {
               (IApplication.getCurrentApp()).terminate();
           }
           if( param == Display.KEY_LEFT) {
                  x--;
           }
           if( param == Display.KEY_RIGHT) {
                  x++;
           }
           if( param == Display.KEY_UP) {
                  y--;
           }
           if( param == Display.KEY_DOWN) {
                  y++;
          }
          repaint();
     }

    }
 }