Skip to content
2009/03/02 / highmt

はじめてのMIDPひとり勉強会メモ

MIDPのプログラミングってどんなものかとふと思い触ってみた。
実機は持っていないのでエミュレータでしか動かしていないのだけれども、
印象としては、不遜ながら(それともMIDPに対する誉め言葉か)とても簡単だと思った。
詳細なところがよく隠蔽されており、ハードウェアを触っている感じがしない。

実機になるといろいろ苦労したりするところが出てきたり、
ある程度の規模になるとそれなりのノウハウが必要になるのかもしれないが、
技術よりはアイデアのほうがより重要な印象。

環境設定

J2ME Wireless Tool Kit 3.0 EA版が出ているが、
今回はちょっと敬遠。

J2ME Wireless Tool Kit 2.5.2 を使用。
Vistaに対応しているかどうか明記されていないので
とりあえずXPで試すことにする。
(Vistaはメインマシンになっているので今何かあると困るから。
仮想化、ねぇ。)

とりあえず、デバイストライバとかがインストールされるわけではないよう(未確認)なので
Vistaでも大丈夫な雰囲気はある(未確認)。

素のJDKとエディタがあればこれだけで開発できるのだが、
やはりいろいろと大変なのでeclipsemeを使用。

参考書

相当古いが、
MIDP 2.0 携帯Javaアプリ開発ハンドブック(ISBN4-8399-1899-6)
を読みながらやってみる。

ちなみに上記の本ではまだJ2ME Wireless Tool Kit 2.2。

CLDC というのは、J2MEで規定しているコンフィギュレーションの名前でJ2SEのサブセットのことらしい。
他にCDCというのがある。
CLDCのほうがより制限が強い。

MIDP というのは、使用できるAPIを規定したプロファイルらしい。
他にDoJaというのがある。
階層的にはCLDCの上にのっかっている感じ。
なのでCLDCのAPIを使用できる。
加えてMIDPのクラスライブラリが使える。

HelloWorld

ひとまずeclipsemeを使わないでやってみる。

  • Wireless Tool Kit を起動
  • プロジェクトを作成
    これで基本的なプロジェクトのフォルダ階層が作成される。
    いろいろな設定があるがひとまずデフォルトのまま。
    target platformはMSA。
  • MIDletクラスを作成
    javax.microedition.midlet.MIDletをextendsする。
    コンストラクタでディスプレイを取得しキャンバスを設定する。
  • Canvasクラスを作成
    javax.microedition.lcdui.Canvasをextendsする。
    paintメソッドをオーバライドする。
  • Graphicsが渡されるのでいろいろやる
  • Wireless Tool Kit に戻りビルドする
  • Wireless Tool Kit でpackageを作成する
    jarファイルとjadファイルができる。
    実機にインストールするときはこの2つが必要。
    実機を持っていないので今回はWireless Tool Kitのエミュレータで動かす。
  • Wireless Tool Kit で実行する
    エミュレータの画面にプロジェクト名が表示されるので選択。
    無事Hellow World!

これだけわかれば、あとはeclipsemeに移っても迷うことはない。

メニューの扱い

  • CanvasクラスのaddCommandでコマンドを追加する
    コマンドの種類がいくつかある。
    ユーザ定義で使用する場合はSCREEN。
  • Canvasクラス(Displayableクラス)のsetCommandListenerでリスナを設定する
    CommandListenerのcommandActionで渡されたコマンドを処理する。

キー入力の扱い

  • CanvasクラスのkeyPressed/keyRepeated/keyReleasedメソッドをオーバライドする
    通常は渡されたキーコードを見て処理すればよい。
  • getGameActionでキーコードをゲームアクション(上下左右とか)に変換できる
    これはデバイスによってキーをどのゲームアクションに割り当てるか異なるため。
    数字の2をUPに割り当ててたりとか。
  • 逆にgetKeyCodeでゲームアクションをキーコード(の1つ)に変換できる
    1つのゲームアクションに複数のキーコードが割り当てられていることがある。

コントロールの扱い

  • CanvasのかわりにFormを使い各種Itemをレイアウトする
    日本語入力はエミュレータではよくわらかなかった。
    実機ではなんらかのサポートがあると考えてよいのだろうか。
    文字種変更(アルファベットとか数字とか)自体はエミュレータでできた。
    どの層の機能なのだろうか。

ゲームのつくりかた

  • 別スレッドでループし定期的に処理をする
  • 押しっぱなし処理などはキーイベントではなくループ内でキー状態を取得して処理する
  • スプライトを使用する
    当たり判定用のAPIまである。

端末制御の扱い

  • MIDletやDisplayが持っている
      – 端末情報の取得
      – バックライト
      – バイブレーション
      – ブラウザ
      – 音声通話
    など。

リソースの扱い

  • getResourceAsStream()でストリームとして取れる。

レコードストアの扱い

  • アプリ終了後もデータを保存するためのしくみ
    アプリごとにレコードストアが存在する。
  • 共有レコードストア を使えばアプリ間でデータを受け渡しできる

HTTP通信の扱い

  • Connectorを使う
    でも、機種によっていろいろ制限があるらしい。

オプションAPI

  • 搭載するかどうかの判断がメーカーに委ねられている機能
    以下のようなものがある。
      – SMS(Short Message Service)通信
      – Bluetooth通信
      – ファイルアクセス
      – PIMアクセス
      – 3Dグラフィクス

サンプル

今回作成したのは往年の名作スターラスターへのリスペクトを表した、ものすごく初歩的な画面。
照準を動かせて弾が出せるだけ。

学習したことを全て詰め込んだサンプルでは当然ない。

必要に迫られればなんとかなりそう、という感覚はつかめたのでよかった。
MIDPが今どの程度需要があるのかはわからないけれど。

2大デバイスであるiPhoneとAndroid。

といきたいところなのだけれども、
なぜかBREWだったりする。

広告
%d人のブロガーが「いいね」をつけました。