TitaniumMobile勉強中


最近はFlashもやってはいるんですが、スマートフォンアプリの方に興味が移りつつあります。もちろん、Flashでも作れるんですが、Flashだったらまあ何とか今までの知識を使えるだろうということで、そうではない方法を試しています。今のところやってるのは、JavaとTitaniumMobileです。

JavaはAndroidの方だけなんですが、TitaniumMobileではiOSでもAndroidでも両方書き出せます。また、開発言語がJavaScriptなので、Web系プログラマには取っ付きやすい感じになってると思います。

ただ、このTitaniumMobile、結構癖があるみたいで、同じソースでAndroidアプリもiPhoneアプリもどっちもさくさく作れるぜーとは行かない様子。

というわけで、まだ完成したアプリなど1つもないのですが、詰まった(ている)ところを少しばかりまとめてみる。

試したのはTitaniumMobile1.6.2+TitaniumStudio(Preview)です。

Windowsで実行できない(スペックの問題?)

どう実行しても私の所持しているWindowsマシンでは起動しませんでした。空のプロジェクトを作成したままのものをコンパイルしようが、buildのフォルダ内を消そうが、毎度タスクマネージャでプロセスを切ろうが、エミュレータの起動までは行くんですが、全てタイムアウトでアプリが起動しませんでした。・・・どうにもしようがなかったので、Windowsは諦めてMacにしました。WindowsではiPhoneアプリは作れませんしね!

opacity=1で落ちる

iPhoneでは問題ないんですが、Androidで配置してあるViewのopacityプロパティの値を1にするとエラーでアプリが落ちました。自分の環境だけ・・・?1.0等でも無理みたいで、1.001とかして回避しましたが・・・あんまりよろしくないと思うので、もっとよい回避策があればいいなぁと思うところです。

anchorPointがAndroidで動作しない

iPhoneでは問題なく、使い方が間違ってるのかもしれませんが、アニメーションしたいImageViewにanchorPoint(0.5,1.0);と設定しても、左上基準でアニメーションします(無視されている)。回避策は・・・直接width, left,等をいじれば何とかなる・・・?とりあえずそんなに大事ではないのでスルーしています。が、あとで問題になりそうな。

画面サイズの取得

iPhoneではcurrentWindow.width/heightで画面サイズが取得できるんですが、Androidだと0になります。これをとるには、

var stageWidth = Titanium.Platform.displayCaps.platformWidth;
var stageHeight = Titanium.Platform.displayCaps.platformHeight;

みたいにする必要があるみたいです。

アニメーションすると、当たり判定が元の位置に残る

アニメーション後に、動かしたViewのleft,topまたはcenterを再設定しないと、前の座標で判定されているような変な動きをするみたいです。これはAndroidとiPhone共通だったかな。

その他

少し作っていくと分かるんですが、iPhoneの書き出しは速く、テストもしやすいので、iPhoneアプリのみ開発には結構使えると思うのですが、Androidアプリの方は、「一応書き出せる」という感じかなぁという印象です。結構癖があって(バグが残っている?)、同じソースで動かそうとすると、無理が出てきます。またTitaniumのせいではないのですが、Androidのエミュレータは起動に大分時間がかかるので、ちょっとどうにかしてほしい感じです。Javaだと実機転送すると即座に見れるんですが、Titaniumだとそうもいかないのでトライアンドエラー形式では厳しいです。まあ自分の作り方にも問題があるところではあるんですけど。。

あと、機能上しょうがないところはあると思うんですが、iPhoneではできるけど、AndroidではできないまたはAndroidではできるけど、iPhoneではできないというものがあります。DashboardViewという結構便利そうなクラスがあるんですが、これはiPhoneでしか使えません(実際にはDashboardViewそのものは作成できますが、DashboardViewItemが作れない)。おそらく今後実装されて行くものなのだと期待していますが、差は限りなく少なくなってほしいなぁと思いますね。

これで結構大きな規模のアプリを作った時に、ソースをどうやって書いていくかが気になる。今は行き当たりばったりで書いてるので、ソースがどうにも読みにくい。

Windowごとにソースを分けるのが結構良さそうなので、Windowをまたぐデータの扱い方をどうするのいいのかということや(今はWindowのオブジェクトにくっつけてます)、Viewをグローバル変数としてバコバコ作るより、Windowに変数として突っ込んでおいた方があとで使いやすそう?とかなんかうまい作り方は無いものかと模索中。

フレームワーク的なものも使ってないのでその辺どうなんだろとか、描画系のAPIがないので画像を加工したりとかは無理なのかなと思っていたんですが、こちらのWebViewでCanvasを使って画像を作成するという手法がすごく使えるような気がするので、実験してみたいです。

Canvasから画像書き出ししてTitaniumに渡す | 2BLOG

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です