« 寒い | Home | <br />が入ったり入らなかったり »

Oct 302008

progression検証 #7 外部データをpreloaderで読み込んでみる(XML編)

エラー処理などは放り出して、先に進みます。前回のエントリーではIndexSceneで外部XMLを読み込みましたが、最初のLoading時に設定系外部XMLやらを読み込む事例は多いかと思いますので、次はPreloaderで外部ファイルを読み込んで、SceneObject等からそのデータにアクセスするのはどーすればよいのか試してみます。

まず前検証でIndexSceneに設定した外部XMLの読み込みをPreloaderに移植します。
#code-1

		private var _loadURL:LoadURL;
		public var myXML:XML;
		protected override function _onCastLoadStart():void {
			_loadURL = new LoadURL(new URLRequest("contents/data/products.xml"));
			addCommand(
				new Trace("Preloader commands")
				,this._loadURL.after(parseXML)
				,new Trace("このコマンドはデータ読込み後に実行されます?")
			);
		}
		private function parseXML():void {
			trace("parseData");
			myXML = new XML(_loadURL.data);
			trace(myXML);
		}

こんな感じでOK。 実行すると外部XMLの読み込みが終わってからIndexが展開されます。ステキ。


で、さてPreloaderで読み込んだ"myXML"を"IndexScene"の中で使用するのにはどうすればよいのでしょう?今ThunderBoldがうまく動かないので詳細は分からないのですが、DisplayObject系のインスタンス構造は以下のような感じ。

stage(Stage)
  instance8(Background)
  root1(Preloader)
  instance(CastLoader)
    instance3(Index)
  instance10(Container)

と言うことなので、StageからPreloaderへはアクセスできそうな感じですが、これ"index.fla"をコンパイルしたときには"preloade.swf"は別物なのでデータが存在しなかったりしてエラーになるかいな??preloaderっつーのは基本"index.swf"のloadingだけを処理するということなのだろうか? もしくはpreloaderからIndexに対してInitObjectのようなものを引き渡せたりするのだろうか?? 一応Staticでぶち込んでしまえば参照はできるだろうけど・・・。それってスマートなのだろうか?

ちなみに"IndexScene(SceneObject)"から"root1"の参照も良く分からなくなってきた。

ということで一時休憩。

1 Comment

今気づいたのだけど、PrelaoderはIndexの読み込み情報しか監視してないってことなのか・・・。外部データを統合的に管理するって考えではないのね。
_onCastLoadStartに外部ファイル読み込みのコマンドを追加するとその辺の諸々の処理が終わってからindex.swfのloadingを開始している。
それはそれで問題ないのだけど、_onProgressがそれまで発動せず、bytesLoaded,bytesTotalも0のままなので、なんか一工夫しないといけない。
commandに入れなければそのまま動作しそうだけど、そうなった場合外部ファイルのloadの管理ができない?
外部ファイル読み込みはIndexとは別に切り分けるべきか・・?
なんかその辺のクラスがあるのかもしれないけど、まだ把握し切れていない・・・。

Leave a comment

Search and Archives