AS3 はじめました、FlashVars でハマりました

ActionScript 3.0 はじめてみました。ブームに完全に乗り遅れてますが気にしませんよ。

まずは本家リファレンスですね。便利。重いですけど。

HTML に埋め込むの面倒くさいんでほかではどういう工夫をしてるか軽く調査。ニコニコのソース見たら下記の HTML に Flash を埋め込むスクリプト使ってたので、僕も使ってみた。こんなんあったんだ。全く知らなかった…orz。

var so = new SWFObject( swf_url, name, width, height, version, backgroundcolor );
so.addVariable( "video_id", "123456789" );
so.write( id );

これで object と embed な HTML を吐いてくれてかなりウマー。簡単に FlashVars で値を渡せたりする。

がしかし、肝心の AS 側での FlashVars の取得方法でハマった。

this.root.loaderInfo.parameters

取得できる らしいので、いろいろ試してみたんですが、

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
   creationComplete="init()">
  
  <mx:Script>
    <![CDATA[
      import mx.controls.Alert;
      private function init():void
      {
        Alert.show( String( this.root ) );
      }
    ]]>
  </mx:Script>
	<mx:VideoDisplay id="video"
	  backgroundColor="0xffffff" width="480" height="360" />
        ...
</mx:Application>

上記のような mxmlコンパイル + 実行してみると、this.root で帰っていくるのがなぜか null。 video.root も null。

イベントのタイミングが原因かと予測して initialize のときに init を実行するようにしても結果は変わらず。

わけわかめな状態になっている時に本家リファレンスを flashvars で検索してみたら下記のドキュメントを発見。

一瞬で解決しました。ググってもなかなか見つからなかったんで、ほかの人は普通躓かないところなんですかねぇ。