Progression Frameworkの中にある、「LoadURL」というコマンドを使って、データのダウンロードを行おうと画策。
が、肝心のチュートリアルがこの状態なので、とりあえず自分で試してみた。
以下、正しい使い方かどうかは知らないがメモ。
■求めるもの
まず、LoadURLコマンドに俺が期待する機能は次の2つ。
- データをダウンロードする
- ダウンロード完了時に任意の関数を実行する
- addCommand(new LoadURL(new URLRequest(url)));
- private var _loadURL:LoadURL;
- ・・・
- private function createLoadURL(req:URLRequest):void {
- _loadURL = new LoadURL(req);
- _loadURL.addEventListener(CommandCatchEvent.ERROR , onError);
- _loadURL.addEventListener(CommandCatchEvent.Exception , onException);
- _loadURL.after(this , parseData);
- }
- private function onError(e:CommandCatchEvent):void {
- //エラー発生時の処理
- //IOErrorEvent、SecurityErrorEvent発生時に、ここに飛んでくる
- }
- private function onException(e:CommandCatchEvent):void {
- //例外発生時の処理
- }
- addCommand(this._loadURL);
- private function parseData():void {
- //ダウンロードしたデータはthis._loadURL.dataにObject型で格納されているので、
- //一旦使いやすい型(ByteArrayとか、IDataInputとか)に変換する
- var data:IDataInput = this._loadURL.data as IDataInput;
- }
-
基本的には、URLLoaderと同じだと思っているので、この2つが出来ればいいんじゃないかな?という事で探っていこう。
■データのロード
データのロードに関しては、コマンドをシーンに追加すればいいっぽい。
ただし、これだとIO/セキュリティエラー発生時とか、ロード終了後に何も出来ない、役立たずなコマンドが出来上がるだけのようだ。
と言う事で、こいつはaddCommand
実行時に作成するんじゃなくて、シーンのメンバーにしといた方がよさそうだ。
調査の結果、こんな感じでシーン内にメンバと関数を定義しておけばよさそう。
で、使用時は
ロード完了時に呼ばれる関数parseData
は、シーン内にこんな風に定義する。
これでいいはずだが、今一正解がわからないのがタマにキズ。
あと、問題はキャッシュ。
同じURLから2回データをダウンロードしようとしたら、2回目以降はキャッシュが有効になっていた。俺としては毎回データを取得しに行って欲しかったのだが、その辺の調整はどうやるのかね?