メイン コーダーズルーム【スクリプト系】 MovieClip.loadMovie 後の挙動について | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kokoo | Åê¹ÆNo.33995 投稿日時: 2007-7-4 13:22 |
新米 居住地: 投稿: 5
使用環境:
Windows XP Professional SP2 Flash MX Professional 2004 (7.2) |
MovieClip.loadMovie 後の挙動について こんにちは。
MovieClip の loadMovie メソッドですが、loadMovie が完了した後は、ムービークリップのインスタンスに設定されていた プロパティやメソッドはクリアされてしまうものだと思っていました。 ですが下記のような単純なサンプル(_root タイムラインに test_mc というムービークリップを配置してプロパティ設定後、test.swf というファイルを test_mc に読み込む)で試したところ、プロパティやメソッドはクリアされずに保持したままでした。 どうしてでしょうか? 勘違いや間違いをしていると思うので、教えていただければ幸いです。 よろしくお願いします。 ---------- スクリプト始まり ----------- -- _root の frame 1 のフレームスクリプト
---------- スクリプト終わり ----------- ---------- 出力結果始まり -----------
---------- 出力結果終わり ----------- 環境 Windows XP SP2 Flash MX 2004 |
Yoshiki Okawa | Åê¹ÆNo.33996 投稿日時: 2007-7-4 15:01 |
新米 居住地: Christchurch, NZ 投稿: 13
使用環境:
Windows 7 Professional Flex SDK 4.0 |
Re: MovieClip.loadMovie 後の挙動について 引用:
プロパティやメソッドはクリアされずに保持したままでした。 ではなく、loadMovieの直後にはまだswfファイルがロードされていないからです。直後に、trace(this.test_mc.getBytesTotal());をしてみてください。おそらく0が出力されます。 これを回避するには、setIntervalでthis.test_mc.getBytesTotal()==this.test_mc.getBytesLoaded()とthis.test_mc.getBytesTotal()>0を調べるしかないかと思われます。 上記の理由よりloadMovieより、MovieClipLoaderと、onLoadInitを使用するのが良いかと思われます。 詳しくは、 こちら(テクニカルノート)
|
kokoo | Åê¹ÆNo.34000 投稿日時: 2007-7-4 16:54 |
新米 居住地: 投稿: 5
使用環境:
Windows XP Professional SP2 Flash MX Professional 2004 (7.2) |
Re: MovieClip.loadMovie 後の挙動について Yoshikiさん、ありがとうございます。
引用: ではなく、loadMovieの直後にはまだswfファイルがロードされていないからです。 おっしゃる通り loadMovie の直後だったからでした。 教えていただいたように MovieClipLoader クラスと OnLoadInit メソッドを使うように書き換えてみたところ、自分で勝手に設定したプロパティ(hoge)やメソッド(SayHello)は期待通り undefined になっているのですが、組み込みの _alpha プロパティだけは元の値を保持したままになっています。 これはなぜなんでしょうか? ---------- スクリプト始まり ----------- -- _root の frame 1 のフレームスクリプト
---------- スクリプト終わり ----------- ---------- 出力結果始まり -----------
---------- 出力結果終わり ----------- |
c-geru | Åê¹ÆNo.34001 投稿日時: 2007-7-4 17:55 |
職人 居住地: 文京区本郷 投稿: 209
使用環境:
10.6.8+ CS5.5 Win7+ CS4 |
Re: MovieClip.loadMovie 後の挙動について 引用:
自分で勝手に設定したプロパティ(hoge)やメソッド(SayHello)は期待通り undefined になっているのですが、組み込みの _alpha プロパティだけは元の値を保持したままになっています。 MovieClipに元々定義されているプロパティ(_alpha,_xなど「_」で始まるリファレンスに存在するもの)は、そのまま保持されているようですね。_alphaなどはMovieClipにクラスに定義され、ユーザが個別に定義したものはステージに配置されたインスタンスに定義されるからではないでしょうか。 _alphaだけでなく、_xscale,_yscaleでスケールを変更しても保持されます。 |
kokoo | Åê¹ÆNo.34004 投稿日時: 2007-7-4 21:49 |
新米 居住地: 投稿: 5
使用環境:
Windows XP Professional SP2 Flash MX Professional 2004 (7.2) |
Re: MovieClip.loadMovie 後の挙動について c-geruさん、ありがとうございます。
引用: _alphaなどはMovieClipにクラスに定義され、ユーザが個別に定義したものはステージに配置されたインスタンスに定義されるからではないでしょうか。 これは微妙に納得がいかないのですが(すみません)、「_alpha などがMovieClipクラスに保存される」というプロトタイプベースの考え方に基づくと、MovieClipオブジェクトの _alpha プロパティにすべてのインスタンスがアクセスできてしまうわけで、オブジェクトの汚染が起こるはずだと思うんです。 ですがFlashはJavaScriptと違い、そういうことは起こっていないわけで、これがまた僕を悩ませているところです。 ということで悩んでも仕方ないので実験をしてみました。 1. _root のタイムラインで createEmptyMovieClip する 2. できたムービークリップのプロパティ( _ で始まるもの)をいじる 3. できたムービークリップに外部SWF(単にシンボルひとつ置いただけのもの)を読み込む で、3の前後で trace したものを見比べたんですが、値が引き継がれているものとそうでないものがあり、やはり悩ましいかぎりです。 ---------- スクリプト始まり ----------- -- _root の frame 1 のフレームスクリプト
---------- スクリプト終わり ----------- ---------- 出力結果始まり -----------
--------- 出力結果終わり ----------- |
野中文雄 | Åê¹ÆNo.34005 投稿日時: 2007-7-4 22:06 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: MovieClip.loadMovie 後の挙動について 外部ファイルをロードしたとき、インスタンスのプロパティには、(1)値がクリアされるものと、(2)一定の値にリセットされるもの、そして(3)ロードしたデータの値で更新されるものがあります。→「MovieClip.loadMovieで外部ファイルを読込む」>「3. MovieClip.loadMovieで外部ファイルを読込む際の注意」
デフォルト値をもたず、ユーザーが設定するプロパティは(1)に属する傾向があるようには感じられます(すべて調べていませんし、例外もあるかもしれません)。ただ、とくにアンダースコア「_」で始まる古いプロパティについては、ActionScriptが実装されるFlash 5より前の仕様や実装を引きずっているようで、明快な分類の指針はなさそうに思われます。 引用: kokooさんは書きました: |
c-geru | Åê¹ÆNo.34007 投稿日時: 2007-7-4 22:57 |
職人 居住地: 文京区本郷 投稿: 209
使用環境:
10.6.8+ CS5.5 Win7+ CS4 |
Re: MovieClip.loadMovie 後の挙動について 引用:
これは微妙に納得がいかないのですが(すみません)、「_alpha などがMovieClipクラスに保存される」というプロトタイプベースの考え方に基づくと、MovieClipオブジェクトの _alpha プロパティにすべてのインスタンスがアクセスできてしまうわけで、オブジェクトの汚染が起こるはずだと思うんです。 ちょっと書き方が悪かったですね 。「インスタンスに明示的に値が設定されているMovieClip固有のプロパティの値は、インスタンスに保持される」といいたかったのです。ここで「インスタンスに明示的に値が設定されている」とは、変形・情報・プロパティなどのパネル上で設定が可能な値を指しています。 kokooさんが調査された結果を見ても、ほぼ当てはまるかなと思います。_width,_heightは読み込まれるswfのサイズが変われば、当然変わってきますが。 ただ野中さんも書かれているように、正確な線引きが出来ないみたいですね。 基本的には「loadMovie完了後の値は引き継がれない」という前提の元、ロード後に明示的に設定してやる・・・という対処になりますかね。私が既存のMovieClipにロードする際は、空のMovieClipを配置して、特に値を設定しないようにしています。 kokooさんのご質問は「どうして一部のプロパティのみ値が引き継がれるのか」なので、回答にはならないのですが。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |