メイン とにかくFLASH【FLASHに関して全般】
addChildとremoveChild | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| cb-ss | Åê¹ÆNo.48873 投稿日時: 2012-3-2 23:36 |
半人前 ![]() ![]() 居住地: kobe 投稿: 32
使用環境:
Windows7 Flash CS5.5 Professional AS3 |
addChildとremoveChild こんばんは。
この度はaddChildとremoveChildについて質問させていただきたく思います。 以下にサンプルを作成しましたので まずご覧いただければと思います。 http://www.geocities.co.jp/aqua_cube_mix/data/add_remove.html ※まず、このサンプルは5フレームで構成されており、 1フレーム目に以下のスクリプトを記述しています。 ▼確認して頂きたい事(動作) まず、「赤」と「青」のそれぞれのムービークリップを 「1」と「2」のボタンでremoveChild(削除)します。 (「10」と「20」でaddChild(表示)もできますが。) そして「赤」と「青」どちらも消えている状態で 「idou」ボタンで、フレームを1つずつ進んで行き 5フレームにいる状態で「idou」ボタンを押すと 3フレーム目に戻る指定なのですが、 この時、先ほどremoveChildした「赤」と「青」のMCが addChildした訳でも無いのに自動的に復活?(表示)されます。 (自動的に復活した「赤」と「青」のMCも 「1」「2」ボタンでそれぞれ再度removeChildは出来ますが) また、最初から「赤」「青」ともに表示されたまま、 (一度もremoveChildせずに)5フレームから「idou」ボタンで 3フレームに戻った時は「1」「2」ボタンを押すとremoveChildされますが、 「赤」「青」が表示されているか消えている状態か関係なく 一度でも「10」「20」を押してaddChildしてから、 5フレ→3フレ移動すると、その後は「1」「2」ボタンで removeChildする事ができなくなります。(汗) フレーム移動でも、前に進む時は特に何も起こらないのに、(想定通り) 前に戻る時はなぜ「赤」「青」が自然に復活する(想定外) のでしょうか? removeChildしたムービークリップはフレーム移動しても(前に戻っても) ずっと消えたままでいて欲しいのです。 「10」「20」を押した時だけaddChildさせたいのですが・・・ また「1」「2」を押した時に確実にremoveChildさせたいのです。 尚、このflaソースファイルも下記にアップしておりますので ご確認いただければ幸いです。 http://www.geocities.co.jp/aqua_cube_mix/data/add_remove.zip ※右クリックで保存してください(flash CS4形式) ※ちなみに「赤」「青」を一度removeChildし、消えた状態で さらに「1」「2」ボタンでremoveChildしようとするとエラーが出ますが、これは納得です。 (消そうとする対象のMCがステージに存在しないから。と解釈しています) 逆に「赤」「青」が表示された状態で「10」「20」でaddChildしても特にエラーはでませんが、 これは特に問題ないのでしょうか? (すでに表示されている「赤」「青」の上にさらに同じ「赤」「青」が追加されていっている事になるのでしょうか?) ご教授いただければ幸いです。 |
| moyashinek | Åê¹ÆNo.48879 投稿日時: 2012-3-4 2:24 |
新米 ![]() ![]() 居住地: 投稿: 1
使用環境:
|
Re: addChildとremoveChild わざわざリンクを貼ってくださっているのですが、自分の環境ではzipが開けないようです。
なので憶測で書かせていただきますが、おそらく「aka」と「ao」のインスタンスをタイムラインに配置しているのではないでしょうか? FlashのタイムラインはgotoAndStop()やgotoAndPlay()での移動や、タイムライン上のキーフレームに差し掛かる度に新しくインスタンスを生成してしまいます。そのため、以前そのフレームに差し掛かったときのインスタンスと、gotoAndStop()などで移動した場合では別のインスタンスとして扱われてしまいます。 なので、以下のコードのように「aka」と「ao」を変数で保持する方法はいかがでしょうか。 //AkaとAoはライブラリからそれぞれリンケージで書き出したもの var _aka:MovieClip = new Aka(); var _ao:MovieClip = new Ao(); _aka.x = _ao.x = 50; _aka.y = 50; _ao.y = 100; //座標はてきとーな数字を書いてます addChild(_aka); addChild(_ao); /* === 以下、投稿者様のコードと同様にButtonとかのコード記述 === */ タイムラインに配置せず、変数に格納することでフレームの移動によるインスタンスの自動書き換えを無視出来ます。 >逆に「赤」「青」が表示された状態で「10」「20」でaddChildしても特にエラーはでませんが、 これは特に問題ないのでしょうか? (すでに表示されている「赤」「青」の上にさらに同じ「赤」「青」が追加されていっている事になるのでしょうか?) 確認してないのですが、確かそういう動きだったと思います。 ex) addChild(aka); addChild(aka); addChild(aka); //ここまででakaが3つ表示リストに加わる なので、akaを表示リストから消すには removeChild(aka); removeChild(aka); removeChild(aka); //とremoveChild()も3回呼び出す必要があったはず.... |
| cb-ss | Åê¹ÆNo.48882 投稿日時: 2012-3-5 9:06 |
半人前 ![]() ![]() 居住地: kobe 投稿: 32
使用環境:
Windows7 Flash CS5.5 Professional AS3 |
Re: addChildとremoveChild >moyashinekさん
ご回答ありがとうございます! おっしゃる通り「赤」「青」のムービークリップは ステージ上に配置していました。 回答いただいた内容を元にさっそく検証したところ 希望通りの動作が確認できました!! また、 >逆に「赤」「青」が表示された状態で「10」「20」でaddChildしても特にエラーはでませんが、 これは特に問題ないのでしょうか? (すでに表示されている「赤」「青」の上にさらに同じ「赤」「青」が追加されていっている事になるのでしょうか?) これに関しては addChild(aka); addChild(aka); addChild(aka); //ここまででakaが3つ表示リストに加わる と3度addChildしても removeChild(aka); と、一回のremoveChildだけで画面上からは一応消えました。 (水面下で管理されている表示リスト上では、2つが残ったままなんでしょうかね・・・?) 重複してaddChildするような事は基本的にないので あまり気にするような事ではありませんが。 (念の為確認しておきたかっただけです。) 回答いただき、大変助かりました。 ありがとうございます。 |
| vader | Åê¹ÆNo.48883 投稿日時: 2012-3-5 15:01 |
常連 ![]() ![]() 居住地: 東京 投稿: 76
使用環境:
MacOS10.8,FlashCS6 |
Re: addChildとremoveChild cb-ssさん、こんにちわ。
重複したaddChildの件で補足します。 基本的に一つのインスタンスは、一つのDisplayObjectContainerにしかaddChildすることができません。 すでに表示リストに加わっているインスタンスを再びaddChildした場合は、一旦表示リストからはずされ、再び表示リストの最前面に加わります。 下記の例では、メインタイムラインにa_mcとb_mcをaddChildし、c_mcをa_mcにaddChildしています。再び、a_mcにc_mcをaddChildしてもa_mc.numChildrenは変化しません。 次にc_mcをremoveChildせずにb_mcにaddChildした場合、a_mc.numChildrenが0になることがわかります。 以上、お役に立ちましたら幸いです。 |
| cb-ss | Åê¹ÆNo.48886 投稿日時: 2012-3-7 9:16 |
半人前 ![]() ![]() 居住地: kobe 投稿: 32
使用環境:
Windows7 Flash CS5.5 Professional AS3 |
Re: addChildとremoveChild >vaderさん
ご丁寧に補足まで書いていただきありがとうございます。 今回壁にぶつかった点はすでに解決いたしましたが、 こちらも合わせて、参考にさせていただきます。 ありがとうございました。 |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン




