トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     読み込んだ外部SWFファイルの操作のことで質問があります。
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yoshi_ido
Åê¹ÆNo.47332
投稿日時: 2011-4-14 18:04
新米
居住地: 長野県
投稿: 5
使用環境:
Windows7,Flash CS5
オンライン
読み込んだ外部SWFファイルの操作のことで質問があります。
読み込んだ外部のSWFファイルの中のオブジェクトの操作について分からないことがあります。よろしくお願いします。

今、ぬり絵ソフトをつくっています。

ぬり絵用の画像、MovieClip「picture」を、ステージに配置しています。
「picture」は、塗りつぶし範囲のマスクと大きな矩形のセットが、塗りつぶしの部品の数だけ重なった構造になっていて、クリックによって、それぞれの大きな矩形の色を変えることによって、色塗りを実現しています。ここまではうまく行きました。

次に、ぬり絵画像を入れ替え可能にするため、MovieClip「picture」の代わりに外部SWFを読み込むように修正しています。ライブラリの中のMovieClip「picture」を右クリックして「SWFを書き出し」を選んで書き出した「pic1.swf」というSWFファイルを使っています。

クリックで色を変更するために「picture」の子オブジェクトのそれぞれに、「for..in」文で「paintable=true」という属性を持たせているのですが、読みこんだ外部SWFでは子オブジェクトにアクセスできないようなんです。


以下にその部分のスクリプトを掲載します。

var loadPic:Loader = new Loader();
loadPic.contentLoaderInfo.addEventListener(Event.COMPLETE,loadcomp);
loadPic.load(new URLRequest("pic1.swf"));

function loadcomp(e:Event):void{
addChild(loadPic);
var coloringPic:MovieClip = MovieClip(loadPic.content);

for each(var item1:MovieClip in coloringPic){
item1.paintable = true;
}
}


ちなみに、ライブラリの中の「picture」というMovieClipを配置していた時のスクリプトは


var pict1:MovieClip = new picture();
addChild(pict1);
for each(var item1:MovieClip in pict1){
item1.paintable = true;
}

でうまく行っていました。

また、それぞれのスクリプトで

trace (coloringPic.numChildren);
trace (pict1.numChildren);

とすると、coloringPic.numChildrenは1、pict1.numChildrenは58、と出力されます。

スクリプトのどこかに問題があるのでしょうか?
読み込んだSWFファイルでは、子オブジェクト(またはそういう概念)がなくなってしまっているように見えるんですが、どうなんでしょうか。何かお分かりの方がいらっしゃったら教えてください。よろしくお願いします。

製作環境
OS:Windows7
Adobe Flash professional CS5
Player:Adobe AIR2
スクリプト:ActionScript 3.0
ひろゆき
Åê¹ÆNo.47334
投稿日時: 2011-4-15 18:07
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 読み込んだ外部SWFファイルの操作のことで質問があります。
まず、説明自体が分かりづらいです。

traceしている部分についても、
「それぞれのスクリプト」が何を指しているのかさっぱり分かりません。

また、制作中のものをそのまま説明しようとしているため、
構造がシンプルになっているようには思えません。

「picture」が何を示しているのかも分かりませんし、
「picture」上に配置されているものも、58も必要ないように思います。


おそらく、このままでは、回答がつかないのではないでしょうか?

少なくとも、回答者が問題を再現できるだけの具体的な説明が必要のように思います。


----------------
質問する際は、回答者に具体的な情報を与えてください。

yoshi_ido
Åê¹ÆNo.47337
投稿日時: 2011-4-16 12:56
新米
居住地: 長野県
投稿: 5
使用環境:
Windows7,Flash CS5
オンライン
Re: 読み込んだ外部SWFファイルの操作のことで質問があります。
ひろゆきさん、返信ありがとうございます。

説明が分かりづらいとのことで、申し訳なく思います。

「picture」が何を示しているのかも分からない、とのことですが「picture」は、ぬり絵用の画像で、塗りつぶし範囲のマスクと大きな矩形のセットが、塗りつぶしの部品の数だけ重なった構造のMovieClipです。
ただ、こうした内容を含む説明は質問の中でもしているので、これ以上何を書けば、何を示しているのか分かっていただけるのか分からず、戸惑っています。

実は、自己解決しました。質問の内容が分からないものの解決方法を書いても意味がないかもしれません。しかし、私の拙い文章でも意味を理解してくれる方もいらっしゃるかもしれません。今後、同じことで悩む方の参考になればと思い、解決方法を書きます。

問題は、読み込んだ外部SWFファイルの中のオブジェクトにアクセスできない、というものでした。

試行錯誤している間に分かったのは、この現象は「外部SWFファイルにTLFテキストが含まれる場合に起きる」ということでした。

どうしてこうなるのかまでは分かりませんでした。しかし、TLFテキストがないFLAファイルをパブリッシュしたSWFファイルを使えば、質問に書いたスクリプトで問題なく動作し、SWFファイルの中のオブジェクトのプロパティを設定できました。

参考になるかどうか分かりませんが、また、余計なことをあいまいに書くと「さっぱり分からない」と言われてしまうかもしれませんが、読み込んできたLoaderオブジェクトのcontentプロパティ(loadPic.content)をトレースすると次のように出力されました。

TLFテキストありのSWFを読み込んだ場合:[object MainTimeline__Preloader__]
TLFテキストなしのSWFを読み込んだ場合:[object MovieClip]

つまり、TLFテキストのあるなしで、contentプロパティが変わっているようです。

以上、ご報告まで。
ひろゆき
Åê¹ÆNo.47338
投稿日時: 2011-4-16 13:11
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 読み込んだ外部SWFファイルの操作のことで質問があります。
相変わらず、さっぱり分かりません。

一例を挙げると「トレースすると」と書かれていますが、
trace文は、それをどこに記述したのかが重要で、
記述した場所によって、出力結果が変わってきます。
したがって、「トレースした」という説明よりも、
具体的にかつ客観的にどこに記述かが分かるように明示すべきです。
下手な説明を加えるより、面倒でも、trace文を含んだスクリプトを掲載すべきでしょう。

少なくとも、他人の時間を使わせてもらっているという意識があるのであれば、
第三者が分かるように伝えるということは、質問者として最低限のマナーだと思います。


また「picture」について言えば、「画像」と表現されていますが、
flaファイルに読み込まれた「画像」であることまでは分かりますが、
それが、「画像」のままライブラリに存在しているのか、
はたまた、flaファイル上に読み込まれた画像を配置した「ムービークリップ」の
「シンボル名」がpictureなのか、「リンケージ識別子(クラス)」がpictureなのか、
ステージ上に配置した「インスタンス名」がpictureなのか、不明確です。

引用:
「picture」は、ぬり絵用の画像で、塗りつぶし範囲のマスクと大きな矩形のセットが、塗りつぶしの部品の数だけ重なった構造のMovieClipです。

上記でも、「picture」は画像でもありMovieClipでもあるわけで、
結局、「picture」は何かを指しているのか、分かりません。

flaファイル制作されているご自身にとっては当然のことであっても、
問題のflaファイルが見られない第三者が推測するにも限界があります。
flaファイルを見ることができない第三者であっても、
同じものを再現できるような説明を心がけるべきでしょう。

番外編 - 質問NGワード集 - テクニカルノート


また、伝わらないことを申し訳なく思う必要はないと思います。
説明が伝わらずに困るのは、あなたご自身だけですから。


----------------
質問する際は、回答者に具体的な情報を与えてください。

Åê¹ÆNo.47341
投稿日時: 2011-4-18 8:38
半人前
居住地: 主に福岡へ出没
投稿: 45
使用環境:
【Win7:FlashCS5:AS3.0】
エディター:FlashDevelop
Re: 読み込んだ外部SWFファイルの操作のことで質問があります。
TLFテキスト関連について、補足というか、有用なページがあるのでご紹介しておきます。

【TLF】ハマったポイントと回避方法

ここの「3:FlashCS5でTLFを使うと、FlashVarsの値がとれない」という部分が関係ありそうです。

TLFテキストを使用することで、階層関係が変わってしまっているのかな?と理解しています。ハッキリした根拠の無い感覚ですけれど。
野中文雄
Åê¹ÆNo.47349
投稿日時: 2011-4-18 17:07
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 読み込んだ外部SWFファイルの操作のことで質問があります。
具体的な状況は別にして、問題の見当はつきましたので、解説を加えました。

TLFテキストのある外部SWFを読込むとその中のオブジェクトにアクセスできない
引用:
yoshi_idoさんは書きました:
参考になるかどうか分かりませんが、また、余計なことをあいまいに書くと「さっぱり分からない」と言われてしまうかもしれませんが、読み込んできたLoaderオブジェクトのcontentプロパティ(loadPic.content)をトレースすると次のように出力されました。

TLFテキストありのSWFを読み込んだ場合:[object MainTimeline__Preloader__]
TLFテキストなしのSWFを読み込んだ場合:[object MovieClip]

つまり、TLFテキストのあるなしで、contentプロパティが変わっているようです。


----------------
 

yoshi_ido
Åê¹ÆNo.47358
投稿日時: 2011-4-19 12:09
新米
居住地: 長野県
投稿: 5
使用環境:
Windows7,Flash CS5
オンライン
Re: 読み込んだ外部SWFファイルの操作のことで質問があります。
葛さん、野中文雄さん、返信ありがとうございます。

説明がうまくできなくて困っていましたが、問題をうまくくみ取っていただいて助かりました。ありがとうございます。

それぞれのリンク先の解説を読ませていただきました。特に野中さんの詳しい解説でよく分かりました。読込んだLoaderインスタンスと、読込まれた外部SWFファイルのメインタイムラインの間に、別のインスタンスが入ってしまっているのですね。

私の試行錯誤の結果も、的外れではなかったことが分かってホッとしました。今回は、TLFテキストを使う必要がありませんでしたので、クラシックテキストに切り替えて対処しましたが、今後TLFテキストを使う場合には、対処法を参考にします。

このたびは、ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops