海賊王をめざす男 マツです。こんにちは。

Flash Builder Burrito で Android アプリを開発しました。

WORDDICT!-ワーディクト - Android マーケット
https://market.android.com/details?id=air.Worddict

「WORDDICT!」は、画面に並ぶアルファベットから、英単語を見つけては指でなぞってつないでいく英単語パズルゲームです。
ゲームは、『お菓子を奪いに来る悪役バグバグから、お菓子を守れ!』というストーリーのもとに展開。
英単語をつくらなければ、時間の経過とともに画面上の文字がバグバグのテリトリーに変わっていきます。
ユーザーはアルファベットの配置を入れ替えながら、できるだけ多くの英単語をつくって悪役から自分のテリトリーを守り、高得点を目指すゲームです。
単語の最後のアルファベットを使い、続けて英単語をつくる「連鎖(チェイン)」といった技を連発したり、長い単語をつくることで高得点を得ることができます。

今回チャレンジしたことは、ふたつです。

・AIR for Android をつくる。
・パズルゲームをつくる。


AIR for Android をつくる。

Flash Builder Burrito で、AIR for Android を制作しました。過去のリソースが使用できるのが最大のポイント。
Flex SDK 4.5 の Spark コンポーネントには、モバイルに最適化されていないものも含まれているので、注意が必要です。
また、端末によってタッチ イベントの精度が違うということも十分に調べておかないといけません。
エミュレータによるデバッグも可能となっています。タッチイベントは、端末でないとテストできない様です。
また端末によるデバッグは、私の環境だとできたりできなかったりします。
android-sdk の tools ディレクトリにある ddms.bat( Dalvik Debug Monitor )を起動するとデバッグできる!
とおもったら次の日にはできなくなっていたり...。要調査です。
AIR for Android のパフォーマンスは、現時点ではネイティブのそれよりも もっさり感があります。
アニメーションのパフォーマンスの向上には、FlashLite の知識が役に立ちました。
同時に Flash のタイムラインによる表現をネイティブの Java 環境でも実現させる試みも検証されました。
スクリプトによる表現と画像をつなぎ合わせたコマアニメの表現のバランスが鍵となる感じです。


パズルゲームをつくる。

ゲーム開発で学んだこと、それはとにかくモックで面白いと思えるところをまずつくれ!ということです。
まだゲームの面白さが曖昧なまま、ゲームシステムをがっつりつくってしまうと後の変更が大変に。
システムの方ばかり気になって、ゲームの演出や面白いところを開発の終盤の方にもっていってしまうと
「ここはこうしたほうがいいよね」という仕様変更になかなか対応できなくなってしまいます。
今回はまさにその典型的なパターンにハマりました。
文字つなげてワードをつくるという漠然としたコンセプトだけだったのですが、文字をチェンジできる仕組みやシャッフルなど、技術者の方から上がってきました。
ちなみに、「WORDDICT!」のバグバグといったキャラクターの世界観が出来上がったのは、リリースの2週間前です。テスト期間を除くと1週間ほどでこのゲームの面白い演出を加えたことになります。
それまでは、無機質なグリッド上に文字が並んでいるだけのものでした。やはり、開発の終盤に面白いところをあてるとゲームシステムやレベルデザインに大きく影響することがわかりました。
ゲームの面白いところは、まず最初につくる!システムは後!これが今回学んだことです。


Android Market 公開するも端末からマーケット検索できない

アプリを公開して、さぁインストール!とおもったら、あれ?端末の Android Market で検索かけてもヒットしない。なんだろう。

それならばと、PC のブラウザから、Android Market を開き
[インストール]ボタンを押してインストールする端末を選択するウィンドウが開くのですが、
「このアイテムはお使いの端末と互換性がありません」
となってしまい Android Market からインストールすることができませんでした。

互換性がありませんといわれた機種(社内確認)
・HTC Desire HD
・Xperia arc
・Galaxy S
・NexusS
・SIRIUS α IS06

互換性があり、インストールできた機種(社内確認)
・Nexus One
・HTC Desire X06HTII

互換性がありませんといわれた機種は、端末の Android Market でアプリ検索の対象になっていないみたいです。
古い機種がつかえて新しい機種がつかえないことに違和感を感じる。

manifest の設定だろうか? Flex モバイルプロジェクトを作成するとできる Hoge-app.xml に AndroidManifest を記述することができます。そこに SDK のバージョンを設定すればいいのかな?

Adobe?AIR * モバイルデバイス向けの AIR アプリケーションの開発
http://help.adobe.com/ja_JP/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffe.html#WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffc

uses-sdk エレメントを含めることはできません。となっていて指定できません。Android アプリに必要な AndroidManifest.xml は、AIR だとビルド時に自動生成されるみたいで手がだせません。


解決

そういや他の AIR for Android はどうなんだろう。インストールできるものあるなと思っていたら、他のスタッフのひとりが気になる点をみつけてくれました。

---
なんか僕、
さっき頂いたapkは解凍したりして
中のandroidmanifest.xmlを読んでいるのですが、
そのタグあったんでひょっとしたら・・
---

みつけてくれた記事
「アメーバピグ for Android」 開発事例 | デベロッパーセンター
http://www.adobe.com/jp/joc/devnet/air/articles/pigg_ameba.html

「ギャラクシー端末からマーケット検索できない現象がありましたので5 方向ナビゲーション制御の設定は記述しませんでした。」というところ

確認すると Hoge-app.xml に確かに記述しています。


これがいけませんでした。方向ナビゲーション制御の設定が紛れ込んでいたので削除することで無事、互換性ありと Android Market にみとめてもらえました。よかった。


Adoobe AIR がすでにインストールされている場合

さて、いよいよ公開されたアプリをインストールします。

1. Android Market から、「WORDDICT!」をインストールする

2. インストール後、「WORDDICT!」を開始する。


AIR をインストールしていない状態で、AIR for Android アプリ「WORDDICT!」をインストールする

AIR for Android のアプリを使用するには、Adobe AIR を別途インストールしていないといけません。

1. Android Market から、「WORDDICT!」をインストールする

2. インストール後、「WORDDICT!」を開始する。

3. 「このアプリケーションを使用するには Adoobe AIR が必要です。今すぐ Adobe AIR をインストールしますか?」というメッセージが表示されます。

4. [インストール]ボタンをクリックすると Android Market の Adoobe AIR のページに移動します。

5. Adoobe AIR をインストール

6. 「WORDDICT!」起動OK


Android Market からインストールできた機種(社内確認)

・HTC Desire HD
・HTC Desire X06HTII
・Xperia arc
・Galaxy S
・NexusS
・Nexus One
・SIRIUS α IS06

上記以外にも、Android OS 2.2 の機種で、Flash Player 10.1 以上が動作する端末がインストール可能です。

HTC Aria は、Android OS 2.2 ですが、ハード的な問題でインストール対象外機種となっています。

米Adobe社は『Flash Player 10.1』の動作環境として、OSにAndroid 2.2とCPUに『ARMv7-A』以上で、ベクター浮動小数点演算(FPU)がハードウェアで実行可能なことと記載しています。
Android 2.2だからといって『Flash Player 10.1』が動くわけではない - ガジェット通信
http://getnews.jp/archives/89453


まとめ

改善の余地はありますが、AIR for Android の可能性を感じることができました。
Flash Builder 4.5 では、iOS への対応も可能になる様ですし、今後に期待です。

iOS, Android などクロスプラットフォームでの開発がこれからどんどん需要がでてくると思います。
ネイティブはもちろんのこと、AIR や Corona、Unity といった選択肢がある分岐点なのかもしれません。

ゲーム開発は、まず面白いところからつくる。技術を身に着けてしまうとマネージャークラスなどそちらのシステム設計にとりかかってしまいがちですが、ゲームの本質的な「面白い」ところを忘れてはいけません。
ゲーム開発には仕様変更がつきものです。ゲームの面白さを後回しにするとガラッと仕様変更が発生した場合、システム全体を見直す必要がでてきてしまいます。ゲームをつくること自体が面白いパズルの様なものかもしれませんね。

HTML5飯