うみの河童

AIR for Androidをやってみて感じたこと

droid

久しぶりの更新です。
最近、AIR for Androidのアプリを作る仕事があったんで
いろいろな壁にぶつかりました。
忘れないうちに記録として残します!

■重い。というか、まだまだ端末のスペックが追いついていない
一番実感したことはこれ。重さ
Stage3Dで3Dがぬるぬる動く~とか話題になって、自分も期待していたのですが、
そのうまみを感じられなかった。。。

そもそも、Stage3Dを使わないと行けないアプリ自体が少なくないので、
あまり出番は無いのでは?

今回組んだアプリは、ちょっと変わったUIを実現させたもので、
画像をめちゃくちゃ使った。重ねた。結果重くなった。

でも、それは世の中に出回っている端末のスペックが
AIRの速さに追いついていないというのが理由なんだろうなって思った。
なので、AIRアプリの時代はもうちょっと先かもね。
でも、今から組んでAIRの癖をつかむのは大いに有だと確信した。
※アンチFlashな人間ではないので。

■cacheAsBitmapMatrixは、諸刃の剣
AIRを軽くしようとググって見ると、必ず出会うであろうプロパティ
詳しいことはリファレンスを見ていただくことにしてー

・ヒット領域がずれる
MovieClipにhitAreaのSpriteをつけたボタンを作り、cacheAsBitmapMatrixを設定。
それを拡大縮小させると。。。
ヒット領域がずれる。FlashCS6のエミュレータでは正常なのに、端末ではずれる。
ヒット領域をalpha = 0にしていると、どこにいるのかわからない。

・画像が描画されない
最近発売されたスマホなら問題ないけど、2年前くらいの古い端末で起こった。
画面操作をしていると、突然、cacheAsBitmapMatrixを指定していた画像が消える。
透明になる。
試しにtraceでalphaの値を見てみると1だし。。。
タップしてみるとちゃんとボタンとして機能している。。。いみぷ

自分が考えた仮説だけど、GPUの処理能力の問題なのかな?と。
描画処理しきれない画像たちが生まれてしまったのかな?と。

AIRでの開発は、機種依存のことを考えないでいい!と大声で言いたいけど、
端末のスペックによっては、想定している動作をしてくれないことがある。。。
完璧なんてないと再度教えてくれました。

■PCのFlashと、AIRアプリでの制作上の違うこと
・MOUSE_OVERを全く使わない。
PCでのFlashの場合、必ずといっても過言ではないMOUSE_OVER。
でも、今回のAIRアプリで1度も使わなかった。
それは、スマホにはMOUSE_OVERなんて考えはないから。
ユーザの指がどの領域の上にあるのかなんてわからないから。

・CLICKは、めっちゃ使った。
AIRには、TOUCH_TAPというステキなイベントが用意されているけど、
CLICKに慣れている & 使い分ける必要な場面に出会わなかったということもあり、
CLICKを多用した。
というか、個人的にはCLICKを使った方がいい?かなと。
それはなぜか?
スマホにはタッチイベントの他に、ジェスチャーイベントってのがある。
スワイプとかがそれ。
その2つのイベントは、Multitouch.inputModeってので切り替える。
ということは、タッチイベントとジェスチャーイベントは同時に使えない。
そこで、マウスイベントの出番。
マウスイベントでタップ(CLICK) を見て、
ジェスチャーイベントでスワイプとかを見れば同時に使える。
まぁ、そもそも、同時に使わないよ!って言われればそこまでの話なんですがw

・スムージングをほぼ全ての画像に適応してやった
スマホは、機種によって解像度が違います。
めちゃくちゃ小さいのから、PCの解像度の高さよりもでかいやつがあったり。
ベタヌリのボタンとかなら、dp回りで解決できるだろうけど、
ボタンに画像を使っていたり、背景に画像を使っていたり。
それを解消したくて、拡大縮小する。
それと合わせてスムージングをかけて、ジャギらないようにする。
このスムージングも重くなった原因かもしれない。。。

・alpha値はなるべくいじらない。
よく、黒背景を後ろに敷いて、その上にwindowを載せることをよくやると思いますが、
それをやってしまっては、フレームレートがダダ下がり。
一番重くする処理と言っても過言ではない。。。

■AIRアプリというかスマホアプリ全体で気をつけること
・操作したいものの位置
操作するとき、一番の邪魔者が指。でも、こいつがいないと何もできない。
ボタンを指でタップするんだけど、その指&手に隠れて、下の内容なんて見えなくなる。
ボタンでゲージを調節していても、ゲージの値を表示する部分が隠れてしまったり。
画面構成はシンプルがありがたい。
操作のしやすさからしても、処理の問題からしても。

・タップしたい位置と実際にタップしている位置のずれ
画面をタップしていると、思っているより指の位置がずれて検知される。
ボタンは大き目がいいかもね。
見てくれは小さくても、ヒット領域を広めにとるなど。

■AIRにして良かった!と思ったところ
・機種依存の影響が少ない
画面の大きさと処理速度の違いくらい?

・PCのFlashを組んでいるときとほぼ同じ
AIR特有のメソッドやプロパティはあれど、
JAVAを新しく勉強して組むという労力を考えれば、
ActionScript3.0の知識がそのまま使えるのはありがたい。泣きたいくらいに。

・JAVAと比較して、カスタマイズしやすい
今回やらせてもらったアプリ制作は、もともとJAVAで組むことでお話がきました。
でも、頂いたデザイン案を見てみると、Androidに内蔵されているUIには無いものばかり。
ほぼ全てのUIを実装することになる。
JAVAで組むとなると。。。お金も。。。時間も。。。
そんなときにお声がかかったのがAIR。
AIRでは、お絵かきのようにUIが作れる(カスタマイズ性が高いといこと)
これが一番の売りといってもいいんじゃないかな。
AndroidのUIは使いにくい!iOSが最高!という方にこそお勧めしたいね。
(自分はXperiaを使う。SONYを使う)

今回感じたことはこれくらいかな?
もっとあった気がするけど、思い出せない。。。思い出せたら追加していきます。

これからもちょいちょいAIRを作っていきます。
今は重いかもしれないけど、
端末のスペックが上がってこれば、もはや敵なしなんじゃないかって思う。

今回の記事の中で、間違いな部分がありましたら教えてください。
批判は、、、ゆとりなので、すぐ心が折れます。
暖かく見守ってください。