例えばライブラリから読み込んだSpriteの子Spriteにインスタンス名でアクセスしたいとか。これを普通にライブラリから読み込んだSpriteの子にアクセスしようとして、
//ライブラリからアタッチ var sp:Sprite = new spriteAttachedFromLibrary() as Sprite; //子Spriteにアクセス var spChild:Sprite = sp.spriteAttachedFromLibraryChild;
とすると、
「1119: 未定義である可能性が高いプロパティ “インスタンス名” に静的型 flash.display:Sprite の参照を使用してアクセスしています。」
と怒られる。
これを回避するためには[]演算子でストリングリテラルを使ってアクセスする。
上記の場合だと、
//ライブラリからアタッチ var sp:Sprite = new spriteAttachedFromLibrary() as Sprite; //[]演算子で子Spriteにアクセス var spChild:Sprite = sp[ "spriteAttachedFromLibraryChild" ];
こうするとエラー回避してアクセスできる。(via 凹村さん、ありがとうございました。)
#追記(09.05.01)
凹村さんに再度コメントいただきました。こういう時はgetChildByNameを使って子Spriteの参照引っ張ってくる方が妥当みたい。もしくはdynamicクラスのMovieClipを継承させて、そのままドットシンタックスでアクセスするか。
凹村さんに再度コメントいただきました。こういう時はgetChildByNameを使って子Spriteの参照引っ張ってくる方が妥当みたい。もしくはdynamicクラスのMovieClipを継承させて、そのままドットシンタックスでアクセスするか。
ちなみに以前むねごんさんに教えて頂いたんですが、これを応用するとFlashPlayerの上位バージョンで追加された新しいメソッドなども使える。
例えばFP10からFileReferenceに追加されたsaveメソッド、これをFP9までしか描き出せないFlashCS3からも利用できる。
var fr:FileReference = new FileReference(); fr[ "save" ]( byte, name );
書き方はこんな感じ。
ただしこのまま描き出したswfは対応バージョンが9になっているので、このsaveメソッドが実行されるとエラーがでる。なのでバイナリエディタでswfの対応バージョンを9から10に書き換えてやる。やり方はバイナリエディタでswfを開いて、4バイトめの「09」を「0A」に書き換えて保存。こんだけ。これでFlashCS3からもfileReference.saveを使ったローカルファイルアクセスができる。
使用は自己責任でお願いします。