0.624これはADL上の結果ですけどそれでも0.1秒位遅れてるぽい。いってもこれがまんま実機で出るなら別に気にしない。実機だとこれの10倍近く遅れているような印象なので、遅っ!って感じ。以前作ったアプリで「ひらがなれんしゅうちょう」はFlashからAIR2.0で画面密度も標準で作っている(当時、標準しか無かった。)のだけど、同じような画面でボタン約90個を表示していても気にならないレベルで表示される。単純に比較出来ないとしても遅いのはたぶんFlexコンポーネントのせい。コンポーネントは汎用性がある分処理のオーバーヘッドが大きくなっているので。コンポーネントをやめてオリジナルなボタンを作るとかは避けたい。パフォーマンスはそのほうが断然良くなる可能性あるけど、フレームワークに守られている良さというか、たとえばここではスクロールがあるけどコンポーネントを使っているなら何も気にせずボタンを配置するだけでいい。オリジナルにボタンを作るならスクロール用のキャンセルを入れたりとか必要な実装が増えていって、フレームワークを使う意義がなくなっていってしまう。現状の仕組みで出来る限りの方法をとる。ここのボタンのスキンは高解像度用と標準用を作っていて、しかもiPhoneをだけをターゲットにしたアプリなのでサイズは結局のところ固定のままだ。スキンクラスやコンポーネントから主にサイズなどを演算している処理をオーバーライドして消したみた。updateDisplayListこのあたりのメソッドを可能な場合はオーバーライドして何もしないようにした。0.504個人的にもっと速くなるんじゃないかと思っていたので若干残念だったのだけど若干は速くなったみたい。何か出来ないかと考えキャッシュさせることにした。Viewが切り替わる度にボタンの生成・破棄をしているので、一度生成したボタンは消えないようにキャッシュして再利用してみる。メモリの使用量は増えるけど「生成」のコストがなくなるはず。0.417お、今度は1回目が遅いものの(キャッシュしていないので)、その後は全体的に速い。0.417っていうのは理論上の最短に近い。それでも実機ではそれなりに時間がかかってしまうので、それをカバーする為に見た目上、先にボタンが表示されるようにした。いわゆる遅延ロードみたいなやつ。修正前はボタンがすべて生成されてから表示していましたが、1フレーム毎に生成している段階で画面に表示し操作できるように変更。下のボタンを操作するには結局最後まで待たなきゃいけないし、全体の表示までのトータルの時間では画面の更新がない分、修正前のほうが速いのだけど、ずっとビジーインジケーターだけが表示されるより印象として速く感じる。いうことで、この方法を使うことにしました。精査して次回のアップデートに入れますのでお待ちください。日kosuke漢字の練習帳が全てリリースされ一段落ついたので、次回更新にむけ改善したい箇所を検証しつつ対応しよう。最初に漢字の練習画面で画面に表示されるまでにかかる時間を短縮したい。ここで時間がかかるのは、漢字を構成する一画一画の線の画像ファイルをロードしているから。直列にロードしているので、画数の多い漢字ほど時間がかかっている。並列にロードすればある程度時間は減るのだが、これだと同時にロードする画像ファイルが多くなると、ビジーインジケーターが回転しないままロード完了までフリーズしたかのような挙動になってしまう。なると回避の為に数ファイル毎に分け間を入れることになり結局問題の解決にならない。そこでこの画像ファイルをすべて埋め込んでしまうことでロード自体を無くせばよい。六年生にはこの画像ファイルが1900ファイル以上ある。画像ファイル一つは5K以下のファイルなのだが、これだけの数を埋め込もうとするとFlexもFlashも書き出し自体が出来ないケースが多い。非常に時間がかかってしまう。以下に改善策の履歴をメモしておきます。1.Embedで画像を埋め込む。最初にトライしたのが、FlexのEmbedメタタグで1900枚すべての画像を埋め込んでしまう方法。以下のようにEmbedタグを約1900回記述し書き出そうとした。Builderから書き出しの途中で以下のエラーになり書き出せなかった。2.SWCにして埋め込む。次に試みたのはSWCにして埋め込む方法。Flashで一画毎にシンボルを定義しSWCに書き出す。Flashで名付けたリンケージ名を参照して利用する。検証結果に違いはないと思いますが、約1900個のシンボルを生成するオペレーションの都合もあり画像からパスデータに変えています。これをFlashでSWCに書き出そうとしたところ、長時間のパブリッシュ状態の後以下のエラーでSWCが出力されず。試しに上記のアラートに指定されている、jvm.iniを編集し512MBを指定して試したのですが状況は変わりませんでした。しかたないので約500アイテム毎に分けSWCを4ファイルにして書き出す。今度はパブリッシュに時間がかかるも無事SWCが出力されました。これをFlexのから使った場合も上手くいったので万事OKと思ったのですが、実機確認用の書き出しでNG。ADL用の書き出しは時間もかからず問題ないのですが、実機用の書き出しがエラーにこそならないものの30分経過しても終わらない。試しにSWCを1ファイルだけにしたら15分位経過して出力されたので、ずっと待っていれば出力されるかもしれないのですが待ちきれずキャンセル。そもそも実機確認を繰り返す開発作業にあってこの時間は現実的じゃありません。Builderでパッケージ化の方法が「標準」の場合にこのような状況で、「高速」を指定した場合はSWCが4ファイルでも出力されたのですが最終的なリリースビルドは「標準」と同等のものなので無意味と思います。この後Flashから書き出すSWCの書き出し方を変えていろいろ試してみたのですが、状況は変わらずで結局SWCで埋め込む方法は諦めました。3.SWFをロードして使う。SWCでダメならSWFをロードして使うしかないかと思いトライ。SWCの時と同様にしてFlashで500アイテム毎に分けて4つのSWFを生成。後で基本的な部分の問題に気づくのですがひとまずここではやったことをそのまま書きます。iOSではLoaderでSWFをloadする時に以下のようにコンテキストを設定しないとロードの段階でエラーになります。ApplicationDomain.currentDomain;も指定します。これを試すとADL上では問題なく動く。書き出しも早いし、画像を使っていた時よりファイルサイズも小さい。今度こそ万事OKと思ったのですが、実機確認に進み状況が変わる。実機用ファイルは無事出力されるも実機確認で以下のエラー。この原因は以下のリンクに記載がある。API以下、引用です。メソッドを使用できません。コードを実行することができません。ファイル内のアセット(ライブラリ内のムービークリップ、イメージ、フォント、音声など)は使用できます。使用することもできます。実行される場合は、特に制限なく動作します。コンテンツをロードしようとすると、エラーメッセージが出力されます。SWFのロード関連でNG事項があることは頭の片隅にあったのですが、ActionScriptの実行がNGなだけだと誤解してました。今回のSWFにActionScriptは含んでいないのですがリンケージ書き出しの時点で制限に該当する模様。なるとSWFをロードしてクラスを参照する方法は無理です。残る手段はリンケージ書き出しせず、タイムラインに配置したインスタンスを名前で参照するしかなさそう。これだと新規のインスタンスの生成は出来ず、配置されたインスタンスを参照して利用するしか出来ないわけだけど、今回の用途ではビットマップデータにさえ出来ればよいのでこの方法でも対応は可能。スマートでない気もするのだが、やむを得ないのでこの方法にもトライしました。1.Flashで1900個すべてのアイテムをステージに配置して名前を付ける。2.シンボルにリンケージは設定はしない。これをパブリッシュしてSWFをアセットとして使う。驚いたのはリンケージを設定しない場合、パブリッシュは一瞬で書き出されたこと。これほど大量のシンボルを持たせ、一つもリンケージ書き出ししない。いう条件でパブリッシュしたのは初めてかもしれなくてよく思い出せないのだけどそんなものだったっけ?なににしてもこれは嬉しい誤算なのでよしとする。書き出したSWFをロードして利用します。この場合も前述のコンテキストを指定してロードしないとエラーになります。ApplicationDomain.currentDomain;これでロードしたSWFをloader.contentより参照しステージに配置したインスタンスを名前で参照できる。この方法では書き出しも通常の時間で無事完了しています。改善したいポイント一つクリア。あとはこれが無事林檎さんの審査通ればいいんですけども。日kosuke小学六年生で習う漢字181文字を練習するiPhoneアプリを作りました。これで小学生の漢字ついにコンプリート。この後はいくつかアップデートを行う予定です。六年生に収録している漢字は以下です。日kosuke小学五年生で習う漢字185文字を練習するiPhoneアプリを作りました。五年生に収録している漢字は以下です。日kosuke小学四年生で習う漢字200文字を練習するiPhoneアプリを作りました。四年生に収録している漢字は以下です。日kosuke小学三年生で習う漢字200文字を練習するiPhoneアプリを作りました。三年生に収録している漢字は以下です。日kosuke小学二年生で習う漢字160文字を練習するiPhoneアプリを作りました。今月中に少なくともあと2学年はリリースする予定です。二年生に収録している漢字は以下です。