画像をロードしたMC 上に attachMovie できない

なんだかんだで3時間ぐらいハマってるので。。FlashPlayer7 コンテンツ(AS2)にて:

  1. 背景上に
    slash.png
  2. 空ムービークリップ “holder” を生成。
  3. holder 上に外部 JPEG 画像(風景写真)をロード
    external.jpg
  4. 画像がロード完了したら、holder 上に リンケージ登録された MC(窓枠的なもの)を attachMovie する。
    waku.jpg
  5. 下のようになるはずだったのに、窓枠が表示されない!!!
    finish.jpg

上記のように該当部分だけをシンプルに作り直したソースはこんな感じです。画像のロード管理は CASA 使ってます。何も難しい事はしてないです。

import org.casaframework.load.media.MediaLoad; 
//配置先となる空MCを生成し、分かりやすいようにずらしておく。
this.createEmptyMovieClip("holder",this.getNextHighestDepth());
holder._x = holder._y = 5;

//CASAを使ってholder上に画像をロード
var mediaLoad:MediaLoad = new MediaLoad(holder, "external.jpg"false);
//画像のロードが完了したら、onImageLoadComplete を実行しろという指定
mediaLoad.addEventObserver(this, MediaLoad.EVENT_LOAD_COMPLETE, "onImageLoadComplete");
//ロード開始
mediaLoad.start();

function onImageLoadComplete(sender:MediaLoad){
    //画像ロードが完了したら、上にリンケージ登録してあるMCをかぶせる
    holder.attachMovie("attachMC""attachMC1",100); //とりあえず深度100に置く
}

FLASH-JP.COM : loadClipしたMCにattachMovieをしても表示されない」とか「F-site | SWFファイルの外部読込みとMovieClip.attachMovie()メソッド」は拝見したのだけど、僕の場合は SWF をロードしているわけではないし、外部 JPEG はロードしているものの、attach する場所は フレームスクリプト上で生成した “holder” なので、attachMovie できるものだと思っていたのですが。

他のケアレスミスかもしれないのですが3時間もつまづいてるし、そんな仕様があるのは聞いた事ないし。うむむ・・・

おまけ:
ちなみに斜線背景はサクッとここで作りました。
ブログに色付き AS コードを貼っているのは「as2html」を使わせていただきました。←枠線だけちょっといじらせていただきました。

昼食後に追記:
まぁ一応どうにかした。そういう仕様だったかなぁ?今後AS3に移行すればどんどん忘れていくんだろうなぁ。

import org.casaframework.load.media.MediaLoad; 

//配置先となる空MCを生成し、分かりやすいようにずらしておく。
this.createEmptyMovieClip("holder",this.getNextHighestDepth());
holder._x = holder._y = 5;
holder.attachMovie("attachMC""attachMC1",100); //とりあえず深度100に置く
//対応策:holderの中にさらに空MCを作って、そこに画像をロードするようにした
holder.createEmptyMovieClip("inner","innerMC",10);

//CASAを使ってholder上に画像をロード
var mediaLoad:MediaLoad = new MediaLoad(holder.inner"external.jpg"false);
//画像のロードが完了したら、onImageLoadComplete を実行しろという指定
mediaLoad.addEventObserver(this, MediaLoad.EVENT_LOAD_COMPLETE, "onImageLoadComplete");
//ロード開始
mediaLoad.start();

function onImageLoadComplete(sender:MediaLoad){
    //ロード完了後の処理
}

Comments:4

どうけ 08-01-23 (水) 15:19

onLoadInitでやったらできませんかね?

ハンドラのタイミングが、
onLoadCompleteはロード直後で、
onLoadInitは1フレーム目に入ってから呼ばれるため
onLoadInitで初期化されてattachMovieしたのが消えてるような気がする。

または、あらかじめ、階層化してload用とattach用を分けておくと安全かも。
MC
└ attachmc
└ loadmc

tera 08-01-23 (水) 15:31

どうけ様
ご教授ありがとうございますー!
CASA の EVENT_LOAD_INIT の方でやってみましたが、同様に表示されなかったです。これって結構使う手段だと思うのに今までこういう状況に遭遇してなかったのが不思議ですw

結局2個目の方法でさらに入れ子にして今作っています。
今後ともよろしくお願いいたします。

おまけ:
CASA で MediaLoad には EVENT_LOAD_INIT があるのに、loadGroup にはないんですね。グループだから初期化しなくていいってことですよね。
という小さな収穫がありました。

taka:nium 08-01-23 (水) 19:21

こんにちわー。

holder.attachMovie(“attachMC”, “attachMC1″,100); の戻り値をトレースすると undefined になるので、実行自体が失敗していますね。
ヘルプを見ると、MovieClipLoader.loadClip メソッドの target パラメータの説明に「ターゲットムービークリップは、ロードした SWF ファイルまたはイメージに置き換えられます。」とあるようです。

ここからは推測でテストしてないんですが、attachMovie() の使用条件には対象となる MovieClip が含まれている SWF 内でリンケージされている識別子のみ呼び出し可能という制約があるので、外部画像を呼び出した場合には、内部的には空 SWF に画像が貼り付けられていると同様の処理がなされている為に、対象リンケージ識別子が存在しない状態となり、attachMovie に失敗するのかなと思います・・・。

書いていてややこしくなってきましたが・・・仕様なんじゃないかと思います(笑

tera 08-01-23 (水) 19:41

これはこれは!リブート中のtakaさんw
コメントありがとうございますー。

>空 SWF に画像が貼り付けられていると同様の処理がなされている為に、対象リンケージ識別子が存在しない状態

なるほど〜。そう考えると腑に落ちました。納得です。
「外部アセットをロードした場所は不可侵」ってことでおぼえておくことにします。ありがとうございましたー。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://www.trick7.com/blog/2008/01/23-121929.php/trackback
Listed below are links to weblogs that reference
画像をロードしたMC 上に attachMovie できない from trick7
AS3習得本
AS3の全容を学習できる本。この中でどれか1冊自分に合ったものを。
Adobe Flash CS4 詳細!ActionScript3.0入門ノート ActionScript3.0 プロフェッショナルガイド 初めてのActionScript 3.0 Flashユーザーのためのステップアップガイド 詳説 ActionScript 3.0 Actionscript 3.0 Cookbook
AS3発展本
ASでアニメーションさせる面白さを知るための本。
Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編] ActionScript 3.0 アニメーション AdvancED ActionScript 3.0 Animation (Advanced)
AS2
"Flash"ではなく"ActionScript2.0"学習のための良著。他にもいろいろ読んだけど、この4冊を読んだ後、自分が成長できた感じがしました。
FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付] Essential Actionscript 2.0 Flash 8 Essentials Foundation Actionscript Animation: Making Things Move (Foundation)

あわせて読みたいブログパーツ

相互リンク

hi-posiさん
携帯Flashといえばhi-posiの岡田昇三さん。FlashLiteの有益な記事もたくさん書かれていていつもお世話になってます。ついにご挨拶させていただきました。面白すぎる人でしたw。

Return to page top