Flash MX2004にて、MovieClipにてloadMovie("xxxx.jpg")、読み込み完了後にリサイズ。
を、やろうとしたら、どうもうまくいかない。どうやら、既存のインスタンスに読み込ませようとすると問題がある様子。
FN0307007 - MovieClip.loadMovieで外部ファイルを読込む - Flash : テクニカルノート
あたりを参考にして、他のインスタンス上でonClipEvent()でやろうにも、
そもそも、loadMovieメソッド直後だと、ターゲットとなるMCのgetBytesTotal()とgetBytesLoaded()に謎の値(元々のインスタンスのバイトサイズ?)が入っていて
なおかつ等価なので、比較にならない。_framesloadedプロパティも同様で、最初のループで、読み込み完了値となる'1'が入っているので、当てにならない。
で、調べている最中に「Jpg画像読み込みターゲットのMCと読み込み後のMCは別インスタンス」という事がわかったので、読み込み前のインスタンスにダミーでプロパティを追加し、それが消えたら読み込み完了、ということでやってみる。
// fw:Jpg読み込み用MC(=JpgFrame)を内包するインスタンス。自分自身もMC。
// 同シーン上の別のボタンインスタンスでのpressイベントにて
// fw内のJpgFrameにJpgファイルを読み込む。
on(press){
//独自にbool型のloadUnCompleteプロパティを追加する
_parent.fw.JpgFrame.loadUnComplete = true;
_parent.fw.JpgFrame.loadMovie( "DSCxxxxx.JPG");
//ローディング完了を監視
_parent.fw.onEnterFrame = function(){
trace( " onEnterFrame" );
//最初のループではJPG画像の値ではない
trace( "this.JpgFrame.getBytesLoaded=" + this.JpgFrame.getBytesLoaded() );
//最初のループではJPG画像の値ではない
trace( "this.JpgFrame.getBytesTotal=" + this.JpgFrame.getBytesTotal() );
//最初のループではJPG画像の値ではない
trace( "this.JpgFrame._framesloaded=" + this.JpgFrame._framesloaded );
//最初のループではJPG画像の値ではないので、true
trace( "this.JpgFrame.loadUnComplete=" + this.JpgFrame.loadUnComplete );
//JPG画像読み込み完了か?
if( this.JpgFrame.loadUnComplete || this.JpgFrame._framesloaded < 1 ){
trace( "loadUnComplete" );
return;
}
//確認
trace( "this.JpgFrame=" + this.JpgFrame );
trace( "this.JpgFilename=" + this.JpgFilename );
trace( "this.JpgFrame._width=" + this.JpgFrame._width );
trace( "this.JpgFrame._height=" + this.JpgFrame._height );
//リサイズ
this.JpgFrame._width = this.TextFrame._width;
this.JpgFrame._height = this.TextFrame._height;
trace( "after width=" + this.JpgFrame._width );
trace( "after height=" + this.JpgFrame._height );
//監視終了
delete this.onEnterFrame;
}
}
ターゲットとなるインスタンスがJPG画像インスタンスとなった場合でも、読み込み未完了の時があるので、合わせて_framesloadedプロパティも確認する。
それにしても、flash(MX)は、やっかいだなぁ。
JavaScriptの土台でJavaを実装しようとしているようなもんんか?
こんなもんでまともなアプリが組めてしまう人のセンスと努力には、ホトホト脱帽。