連載
» 2004年10月25日 15時25分 公開

第2回 カードゲームをつくってみよう90Xi専用ゲームiアプリ開発講座(3/3 ページ)

[澤橋辰典・武上将樹,ITmedia]
前のページへ 1|2|3       

キー操作をしてみよう!

 ゲームには、描画だけでなく、イベント処理が必要だ。具体的には、ユーザーからのキー入力を受け取り、それに応じた処理をする。

 カードゲームを作る場合、カードをキーで選択しなくてはならない。processEventは、何かキーが押される/離されると、システムが呼ぶメソッドである。

 キーが押された時には、Display.KEY_RELEASED_EVENTが、キーが離された時には、Display.KEY_RELEASED_EVENTが引数paramに代入されて呼ばれるので、何かが押された時にそのキーを取得するプログラムは以下のようになる。

  public void processEvent(int param, int key) {
    if (param == Display.KEY_PRESSED_EVENT) {
      event = key;
    }
  }

 このようにして取得したキーイベントを、メイン処理内で判断し、それぞれの処理を行う。

  for (;;) {
    int add = 0;
    switch(event) {
      case Display.KEY_LEFT:
      add = CARD_COUNT - 1;
      break;
      
      case Display.KEY_RIGHT:
      add = 1;
      break;
      
      case Display.KEY_SELECT:
      select_card = cursolX;
      break;
    }
    cursolX += add;
    cursolX %= CARD_COUNT;
    
    repaint2();
  }

 例えば、左ボタンを押すと、eventにはDisplay.KEY_LEFTが代入されている。その下にそのキーが押されたときに実行したい処理を記述する。

 この例では、左(右)を押すとカーソルを1つ左(右)に動かしている。決定キーを押した場合は、現在のカーソル位置のカードを記憶する。

 repaint2()は、任意のタイミングでpaintメソッドを呼び出すもので、

  static void repaint2() {
    _canvas.paint(_canvas.getGraphics());
  }

 現在のキャンバスのGraphicsオブジェクトを取得し、それを引数として、paintを呼んでいる。

 では、カーソル描画をしてみよう。

  g.setColor(0);
  g.fillRect(15+(cursolX*60), 15, 60, 40);
  
  if (select_card >= 0) {
    g.drawString((select_card+1)+"番のカードを選択", 30, 100);
  }
  
  for (int i=0;i<3;i++) {
    g.drawImage(img[i], 20+(i%3*60), 20);
  }

 Graphics.fillRectで黒く塗りつぶした矩形を描き、その上に画像を描画している。

 このままビルドしてみると、カーソルが移動した跡が残ってしまう。またカーソルを速く動かすと、画面がちらついて見えることがある。

 これを解消するためには、前述のプログラムの前に画面を消去する(全画面を白く塗りつぶす)文を追加する。加えて、すべての描画処理をロックすると、いちいち描画せずに、一回のpaintごとにまとめて描画するようになる。

 画面を背景色(デフォルトは白)で塗りつぶす処理は、

  g.clearRect(0, 0, getWidth(), getHeight());

 getWidth()はその端末の描画可能な画面幅を、getHeight()は画面高を返してくれるので(機種によって値が異なる)、(x,y)=(0,0)〜(画面幅,画面高さ)まで、つまり全画面を消去できる。

 描画をロックするには、以下の2文で描画処理を囲む。

  g.lock();
    …描画処理
  g.unlock(true);

 この間に描画処理を記述することで、画面のチラツキが発生しなくなる。

次回は「遊べるところまで作ってみよう!」

 今回は、文字や矩形や画像を表示し、キーを押すことでカーソルを動かすアプリを作成した。しかし、これではまだゲームとはいえず、まったく遊ぶことができない。

 次回は、乱数やタイマーを使った「遊ぶことができるアプリの作り方」をレクチャーする。

 ここまでのプロジェクト(ソースコードと画像)は、ここからダウンロードできる。zipファイルを解凍してできたフォルダ(src,res)を、Cardプロジェクトのフォルダに上書きすれば、ビルド・実行が可能だ。

 何といっても、ゲームアプリ作成に一番必要なのは、“クリエイティブ魂”だ。講座を読んで、「こんなことができそうだ」と感じたら、ソースを改造したり、付け加えてみたりして、いろいろとチャレンジしてほしい。

筆者紹介──澤橋辰典・武上将樹

 ケータイアプリ(iアプリ/EZアプリ/Vアプリ)のNo1ポータルサイト「アプリ★ゲット」を運営するスパイシーソフトに勤務。

 澤橋は学生時代、iアプリのコンテストでゲームアプリやツールアプリを制作し、入賞経験がある。また、所属していたサークルの後輩に、ものづくりの楽しさやアプリの奥義を授け、その後輩も入賞していることから、自らをiアプリエヴァンジェリスト(伝道者)と呼んでいる。現在も大手企業にOEM提供しているアプリの開発を行っている。

 武上は、イーアクセスとの共同事業「どこでも読メール」や、各社にOEM提供しているアプリメールサービスなどで、主にサーバサイドやデータベースまわりの開発を担当している。ゲームアプリは、もっぱらプレイ専門。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

この記事が気に入ったら
ITmedia Mobile に「いいね!」しよう