ビルド種類:スタンドアローン Java for Mobile Devices のモードでは全部で 26 個のオブジェクトが使えます。単純にエクステンションの使用に制限が加わるだけではなく、ゲームループ実行中にスプライトの拡大や縮小・回転が使えません( MIDP は画像の拡大縮小や回転の機能を標準で持たない)。Java 系のビルドだとスプライトのインクエフェクトや半透明なども使えませんのでその制限も引き継がれます。
スタンドアローン Java for Mobile Devices は MMF2 Developers Version でのみ利用できるビルド種類です。
しかし MIDP2.0 なので MMF2 でビルドした後、海外の別サービスを使ってアンドロイド用の(怪しい)野良アプリにコンバートすることなどはできます。アンドロイドもそろそろウィルスやセキュリティホールが話題になっているので安易なコンバートもお勧めできませんが、JavaME 程度の機能ならすでに動作互換性があるんだなという個人的な確認ができたので、今後は正式なアンドロイド用のエクスポーター完成が楽しみでもあります。
次にエクステンションのリストを眺めながら使える主要なエクステンションを簡単に解説していきます。
- Advanced Direction
- Advanced Game Board
- Advanced Path Movement
- ClickTeam 動作コントローラ
- Direction Calculator
- Ini
- Mobile Utilities
- MobileFont
- Move Safely 2
- Platform Movement
- Randomizer
String Parser- Wargame Map
- アクティブ
- オブジェクト移動
- カウンター
- クイック背景
- サブアプリケーション
- スコア
- ライフ
- レイヤーオブジェクト
- 問題と回答
- 文字列
- 日付&時間
- 背景
- 配列
ファイル入出力
「 Ini 」や「配列」
「String Parser2」※は筆者が PC 用ビルドでよく使う「 Binary Object 」の作者「 3EE 」のエクステンションです。テキストファイルの読み込みや保存、CSV ・ MMF ARRAY や Ini 形式への変換を行うことができるのでこれでまた筆者が素直に「 Ini 」を使う理由が一つ無くなりました。このエクステンションの本来の使用目的は Dictionary で「 String Tokenizer 」と似た機能を提供しますが「String Tokenizer」よりも高機能です。デリミタ(区切り文字)を指定することで値や文字列を切り分けます。本来は普通に辞書としてマッチングしたデータを探すものだと思いますが、CSV 形式で保存したファイルなどを読み込ませれば、デリミタの位置をインデックスとして利用して値を呼び出せます。例えば「配列」で作った配列データを「 String Parser2 」に渡して保存するとかいった用途にも使えます。MMF2 日本語 Wiki にもこれはヘルプの翻訳がありました。
※ 「 String Parser2 」は Java でまったく機能しないことが判明。モバイルとかアプレットとか含めて Java ではまったく使えないと思います。PC 用なら大丈夫だけど、今回活躍を期待していたので残念でした。
筆者は基本的にいまさら Ini 形式を覚えるのが嫌でこれをなるべく避けて通る習性があります。ファイル入出力については「 Ini 」「配列」「 String Parser2 」と 3 つ2つ?方法があることが分かったので「 Ini 」は今回も使わないで済みそうです。特に「 String Parser2 」は変換機能があるのでデリミタを登録すれば CSV 形式で最初に読み込んで保存する時に Ini 形式へ変換して保存することもできます。
乱数発生
乱数発生器は標準で MMF2 にも付いてくるのですがこれがかなり貧弱な乱数なので、「 Randomizer Object 」を使うほうが良いです。「 Randomizer Object 」はまず乱数の発生にシードを指定できます。乱数の Seed を指定できれば毎回同じ条件で同じ乱数を発生させることができます。カードゲームを作る際にはこの機能が無いと困ります(例えばフリーセルとか)。あとは乱数の範囲を指定する際にマイナス値を含めることが出来ます。これだけでも MMF2 標準の乱数を使わないで「 Randomizer Object 」を選ぶ価値があると思います。あと変わったところではランダムで文字を表示する機能があります。日本語には対応してないのでアルファベット文字だけですが、もしも必要なら「 String Parser 」と組みわせればもっと自由にランダムで日本語文字列が表示できるでしょう。もうひとつ特徴的な機能に非アクティブなイベントグループを特定の確率でアクティブにするという機能があります。アクティブにするイベントグループは完全なランダムチョイスか、特定のアクティブグループだけを選んで対象とすることができます。
背景
背景にはオブジェクト 二種類が使用可能です。ただしどちらも内部に画像を保持して使うタイプのオブジェクト。イメージを外部参照して読み取れるタイプの「ピクチャ系」が使えないのでやや不便ですが、これはビルド種類がモバイルだから適用される制限です。スタンドアロン Java アプリケーションならピクチャ系もちゃんと使えます。
「背景」は本来「障害物として」という設定があるので、これを利用すれば背景とスプライトの衝突を検知できます。しかし今回モバイル Java ビルドではなぜかこの背景とスプライト(アクティブオブジェクト)の衝突を正しく検出してくれなかったのでビルドした後になって一時まともに衝突が検知できないトラブルに遭遇しました。解決策としてクィック背景は今回不使用としました。コリジョンの誤検出は Java ビルドだけにおけるバグだと思います。PC 用ビルドでは影響が無かったので、Java ビルドはやはり実際ビルドしてみるまでどんなバグがあるか分からないというバッドノウハウが結構ありました。バッドノウハウの一つとして今回得た教訓は、「背景との衝突は Java だとなんかバグがあるから、コリジョンの検出は全部スプライト(アクティブオブジェクト)でやった方が良い」、があります。
数学補助とか
※下のサンプルはマウスとキーボード操作で座標を動かせます
「 Advanced Direction 」や「 Direction Calculator 」はどのくらいの人が使うか(必要とするのか)良く分かりません。自前で計算をこなす人はこれを使わないし、もともと計算が得意な MMF2 は標準でこれらエクステンションに頼らなくても色々算出できます。「 Advanced Direction 」は二点間距離や角度が簡単に得られます。上の動作サンプルが「 Advanced Direction 」を使ったものです。ちなみに数学関連の Q&A は本家フォーラムで捜すと初心者向けの秀逸なものがあります。数学教育(主に 三角関数)用に作られたサンプルファイルなどもあって探すと面白いです。
その他
「 Advance Game Board 」や「 Wargame Map Object 」も興味をそそりますが、仕様を覚えるまでに時間をかけることになるので筆者とかは触らないから説明すらできません。一方で PMO が使えるのはありがたい人が多いのでは。PMO は 2D プラットフォームアクションを作る際によく使われるエクステンションです。これもカスタムすればいろんな動作が作れるので PMO の人気は高いと思います。筆者は残念ながらこれも普段使わないのであまり詳しくありません。