こんにちは。きんくまです。
今日、嫁と下の子が無事に退院しまして、家に帰ってきました。
やっぱり、新生児は「軽い!」。
いつも、上の子(3歳児)を抱っこしたりしてるのですが、なんせ16kgですからね。
そりゃ、ずっと抱っこしてたら疲れます。
出生届も役所に出したし、とりあえずはひと安心です。
————————————–
※2010/3/28 追記
下のfile.canonicalize();をやった場合に、ApplicationUpdaterUIを使い、アップデートを
行うと、アップデートが終わった直後の起動時にうまくいかないことが判明。
直後の回を手動で終了して、アプリを再起動するとまたうまく取得が可能。
ちゃんと調査ずみではないのですが、file.canonicalize();をやらなくてもうまくいく様子。
————————————–
さて、今回はAIRでの小ネタ。
■やりたいこと
・AIRアプリと一緒に、本体とは別のswfをインストールしたい。
・さらに、そのswfをAIR本体swfから読み込んで使いたい。
・その際にパスが問題なるけどどうするのか。
・さらに、開発環境と本番環境のパスが違ってくるのをどうするのか。
って感じです。
ファイル構成
こんな感じです。
├─air.fla(AIR本体)
├─air1.swf
├─air1-app.xml
├─contents(フォルダ)
├─contents1.swf(読み込みたい+インストールしたいファイル)
一緒にインストールする設定
ここではcontentsフォルダ全体をインストールする設定にしました
Fileクラスのcanonicalizeを使えばOK
アプリケーションの実行しているパスは
File.applicationDirectory
で取得できます。
それで、そのままそれを使ってloaderのURLに突っ込むとうまくいきません。
それで途方にくれてASDocをながめていたんですが、そしたらよさげな関数みっけ。
canonicalizeっていうやつでこいつを実行してあげると、うまく解決してくれました。
やったー。
これを使えば、本番でも開発でも両方共通のソースコードでやることができます。
参考のソースです。
package { import flash.display.Loader; import flash.display.MovieClip; import flash.events.Event; import flash.filesystem.File; import flash.net.URLRequest; /** * ... * @author KinkumaDesign */ public class AIRLoadTest extends MovieClip { private var _loader:Loader; public function AIRLoadTest() { loadStart(); } private function loadStart():void { _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHD); _loader.load(new URLRequest(getFileURL())); } private function loadCompleteHD(e:Event):void { _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadCompleteHD); addChild(_loader); trace('load'); } private function getFileURL():String { var file:File = File.applicationDirectory.resolvePath("contents/contents1.swf"); //コンテンツへのパス //file.canonicalize(); //これが重要!!!!!!←重要だと思ったけど違うっぽい。上の追記コメントを参照のこと return file.url; } } }
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ