例えばライブラリから読み込んだ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 凹村さん、ありがとうございました。)
ちなみに以前むねごんさんに教えて頂いたんですが、これを応用すると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を使ったローカルファイルアクセスができる。
使用は自己責任でお願いします。
br>
凹村
普通に作る限りライブラリから読み込んだものはMovieClip継承してるから、MovieClip型の変数で参照すべきなのかも(MovieClipはdynamicクラスだから普通にアクセスできる)。spriteAttachedFromLibrary型にするってのもできるけど。それか、DisplayObjectContainerらしく、getChildByNameを使うべきなのかも。
2009年5月 1日 21:36あ、わざわざSprite継承に変えて読みこんでました。Spriteはdynamicじゃないんですね。
この場合だとgetChildByName使うのがスマートっぽいですね。getChildByName知りませんでした…。
お忙しいところありがとうございます。
2009年5月 1日 22:24西村斉輝(にしむらなおき)
1984年兵庫県生まれ。
現在多摩美術大学GD科在籍。
パーソナルサイト
source laboratory™運営。
Powerd by
MovableType 4.1
コメント