連載

第4回 カメラ機能を使ってカードを作ろう90Xi専用ゲームiアプリ開発講座(1/2 ページ)

900i専用のトレーディングカードゲームを開発するため、今回は900iのカメラ機能と画像処理機能を利用してゲームの主役であるカードを生成する方法を紹介する。

  • 8@90xiAv̂ꂩ
  • 7@lbg[NiAv̂߂̃T[oTChpi2j
  • 6@lbg[NiAv̂߂̃T[oTChpi1j
  • 5@ XNb`pbhւ̃f[^ۑƃ_E[ht@C̏
  • 4@J@\găJ[h낤
  • 3@ȒPȃQ[쐬̗gɕt
  • 2@J[hQ[‚Ă݂悤
  • 1@90xi̎ɉ邩
  •  前回は画面遷移を設計して、それをベースにカードゲームを作るサイクルを紹介した(11月1日の記事参照)

    今回からは、900iシリーズならではの機能を利用して、アプリに組み入れてみよう。まずは、カメラの使い方と、その応用で撮影画像を解析してカードの画像とパラメーターを生成する処理を解説する。

    advertisement

    カメラオブジェクトの使い方を知ろう

     Cameraクラスは、カメラ機能を呼び出して、静止画や動画を撮影する機能を持つオブジェクトを定義できる。CameraクラスにあるgetCamera(int id)でカメラIDを指定することで、カメラオブジェクトを用意することができる。カメラIDはゼロから始まるが、900iシリーズには標準で一つ以上のカメラが搭載されているので、引数にゼロを指定すると、デフォルトのカメラをスタンバイする。

    AMP 非対応のコンテンツです。こちらからご覧ください。

     前回のコードにSCENE_DECKという、カード閲覧モードとカード生成モードへのメニューが表示されるシーンを追加した。デッキ:DECKとは、カードゲームで使用するカードが組まれた束のことだ。

    AMP 非対応のコンテンツです。こちらからご覧ください。

     カード閲覧シーン(SCENE_DECK_VIEW)では取り込んで作成したカードの表示を、カード生成シーン(SCENE_DECK_CAMERA)では、画像の撮影と解析を行う。

     撮影画像をアプリに取り込むために、取り込む画像サイズや、カメラ操作モードの指定などが必要となる。

     Camera.setImageSize(int w, int h)で、撮影画像の幅と高さを指定する。

    AMP 非対応のコンテンツです。こちらからご覧ください。

     Camera.takePicture()を呼び出すと、カメラが静止画撮影モードで立ち上がり、ユーザの操作を待つ状態になる。

    AMP 非対応のコンテンツです。こちらからご覧ください。

     撮影すると、指定したカメラオブジェクトに撮影画像が格納される。撮影モードを指定せずに撮影すると、1枚だけ画像を保持する。ほかにも連射モード、ムービー撮影モードなどが用意される。撮影された画像はCamera.getImage(int index)で指定したindexの画像のMediaImageを得ることができる。

    AMP 非対応のコンテンツです。こちらからご覧ください。

     しかし、もしユーザがカメラ起動後にクリアキーなどで撮影をキャンセルしてしまった場合は、画像が保持されないため、この状態でgetImageを実行すると例外ArrayIndexOutOfBoundsExceptionが発生する。

     そのため、Camera.getNumberOfImages()を実行して、保持画像数がゼロの場合には処理を中止するようにしておく。

    AMP 非対応のコンテンツです。こちらからご覧ください。

           | 次のページへ

    Copyright © ITmedia, Inc. All Rights Reserved.