画像をロードした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){
    //ロード完了後の処理
}
このエントリーをはてなブックマークに追加
はてなブックマーク - 画像をロードしたMC 上に attachMovie できない

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

Return to page top