- ベストアンサー
attachBitmapしたMCのgetBytesTotalを取得する方法
- 空のMCに対してgetBytesTotalを実行すると、正しく値を取得できない問題があります。
- attachBitmapを使用して画像を読み込む方法については、参考URLをご確認ください。
- ルートに配置されているframe_mcにattachBitmapを適用していますが、取得できるトータルサイズは12しかありません。なぜでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1せす。 > 焦点を洗いなおすと、ロスレスの外部画像を読み込む時に > getBytesTotalを使うということです。 > この条件で回避策はないんでしょうか。 難しく考えず,単純に, 画像ロード完了時に ターゲットMC(ロード用のダミーMC)のバイト数を取得すれば良いだけかと思いますが。 具体的には // ターゲットMC(ロード用のダミーMC)は要らないので削除 Target.removeMovieClip(); これをする前(これより前の行に記入)です。 これをしてしまうと削除されてしまうのでダメです。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
getBytesTotal は 「SWFロード時にSWF自体のバイト数を取得するとき」 または 「ムービークリップに何かをロードする時にロードした外部の何かのバイト数を取得するとき」 にしか使いませんでしたから私も今まで気づきませんでしたが, MovieClit.getBytesTotal() では, そもそもムービークリップのバイト数を取得することはできないようですよ。 > attachBitmapとgetBytesTotalは相性が悪かったりするのでしょうか。 そういうことではなくて, attachBitmap するしないは関係なく, ムービークリップ内にあるもののバイト数は取得できないということです。 Flash オーサリングツールで 1つのムービークリップを作成して その中に(そのムービークリップ内のタイムラインのステージ上に) 例えば「image.png」でも読み込んでみて そのムービークリップ自体に onClipEvent(load){ trace(this.getBytesLoaded()); } などと書いてみるとわかりやすいと思います。 この場合でも 12 しか出力されません。 イメージ的には下の図↓のようになっている感じです。 MovieClit.getBytesTotal() はやはり通常通り ムービー(SWF) 自体の NowLoading... を作るとき または ムービークリップに何かをロードするときにロード待ち処理をする場合 のようなときにしか使えないものだと思います。 それ以外の場合で要ること... ??? 私の経験や空想力からは想像(想定)できません。 だから 12 しか出力されないという 取り方によってはバグとも取れる仕様であっても 困る人はいないのだと思います。 (ネット検索で探しても それで困っていらっしゃる方は見当たりませんよね?)
補足
丁寧な解説ありがとうございました。 おかげさまでよくわかりました。 しかし疑問もあります。 ↓こういうのとはどう違うのでしょうか。 http://okwave.jp/qa/q1536690.html 外部ファイルをムービークリップにloadMovieで読み込ませてgetBytesする方法です。 私の場合はattachBitmapを使用しているのでそこが問題なのかな、と推測したのです。 焦点を洗いなおすと、ロスレスの外部画像を読み込む時にgetBytesTotalを使うということです。 この条件で回避策はないんでしょうか。 ロスレスが使えれば、attachBitmapは使わなくてもいいです。
お礼
おかげさまで解決できました。 Target.removeMovieClip();されるまえにTarget.getBytesTotal();をすることで解決できました。 おっしゃられるとおりです。 以下解決後のスクリプトです。 import flash.display.*; var dummy:MovieClip = this.createEmptyMovieClip("dmy_mc", this.getNextHighestDepth()); dummy._x = 10000; var MCL:MovieClipLoader = new MovieClipLoader(); var OBJ:Object = new Object(); OBJ.onLoadInit = function(Target:MovieClip):Void { var BMD:BitmapData = new BitmapData(Target._width, Target._height, true, 0); BMD.draw(Target); //↓ここから totalSize = Target.getBytesTotal(); onEnterFrame = function() { loadedSize = Target.getBytesLoaded(); nowLoadedSize = Math.round(loadedSize/totalSize*100); if (nowLoadedSize == 100) { Target.removeMovieClip(); _root.frame_mc.attachBitmap(BMD, 0, "auto", true); } else if (nowLoadedSize<100) { _root.stop(); } } //↑ここまでが今回の肝 } MCL.addListener(OBJ); MCL.loadClip("img.png", dummy); これで外部ファイルのロスレスのスライドショーができるようになりました。 attachBitmapは単純に”鏡に映している”みたいなことだったわけですね。 実際の読み込みはTargetに行っていたということがわかりました。 dummy._x = 10000;を試しにdummy._x = 10;にしてみるとその動きがよくわかりました。 ありがとうございます。