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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
えり
Åê¹ÆNo.43669
投稿日時: 2009-10-10 12:10
新米
居住地:
投稿: 15
使用環境:
win,mac
Flash CS4
addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
初歩的な質問で失礼をいたします。。
addChild()したmcを入れ替えたい(既にaddChild()したmcがあったらば、削除してからまたaddChild()したい。)場合でございますが、removeChild();ではうまくいかず悩んでおります。。

---------------------------------------------*

//まずc_spaceというmcを生成。
var c_space:MovieClip=new MovieClip();
MovieClip(parent).addChild(c_space);
c_space.x =0;
c_space.y =0;

//menu_btn_01を押したら、c_spaceの子供にc_all_wを追加。
menu_btn_01.addEventListener(MouseEvent.CLICK,list_works)

function list_works(evt:MouseEvent):void{
c_space.removeChild(); //c_spaceに子供がいたら一度削除。。。したい。
var c_all_w:all_contents_works = new all_contents_works();
c_space.addChild(c_all_w);
}

//menu_btn_02を押したら、c_spaceの子供にc_all_sを追加。
menu_btn_02.addEventListener(MouseEvent.CLICK,list_sound)

function list_sound(evt:MouseEvent):void{
c_space.removeChild(); //c_spaceに子供がいたら一度削除。。。したい。
var c_all_s:all_contents_sound = new all_contents_sound();
c_space.addChild(c_all_s);
}


---------------------------------------------*

なぜremoveChild();が効かないのでしょうか。。。
これではc_spaceにaddChild()したmcが差し替えにならず、どんどん重なっていきます。

野中文雄
Åê¹ÆNo.43670
投稿日時: 2009-10-10 12:37
ちょんまげら
居住地: 東京
投稿: 4166
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
文法が間違っているからです。スクリプトは山勘で書かず、[ヘルプ]を確かめましょう。
引用:
riedynaさんは書きました:
c_space.removeChild(); //c_spaceに子供がいたら一度削除。。。したい。
// ...[後略]...

なぜremoveChild();が効かないのでしょうか。。。

[追記] なお、子どもがいるかどうかは、 DisplayObjectContainer.numChildrenプロパティで調べられます。また、DisplayObjectContainer.removeChildAt()メソッドが使える処理内容かもしれません。ということで、やはり[ヘルプ]に親しむことが大切です。


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

えり
Åê¹ÆNo.43678
投稿日時: 2009-10-11 3:54
新米
居住地:
投稿: 15
使用環境:
win,mac
Flash CS4
Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
ありがとうございます!!
やまかんにならないよう少しずつでも勉強いたします!


removeChild();にて削除する子オブジェクトの指定をして
ありませんでした。。。

以下のように組み直しいたしましたが、一応入れ替え出来るのですが、

ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。
at flash.display::DisplayObjectContainer/removeChild()
at m_btn_01_05/list_works()
”というエラーが出てしまいます。

------------------------------------------------------*

//まずc_spaceというmcを生成。
var c_space:MovieClip=new MovieClip();
MovieClip(parent).addChild(c_space);
c_space.x =0;
c_space.y =0;

var c_all_s:all_contents_sound = new all_contents_sound();
var c_all_w:all_contents_works = new all_contents_works();


//menu_btn_01を押したら、c_spaceの子供にc_all_wを追加。
menu_btn_01.addEventListener(MouseEvent.CLICK,list_works)

function list_works(evt:MouseEvent):void{
c_space.addChild(c_all_w);
c_space.removeChild(c_all_s);
}

//menu_btn_02を押したら、c_spaceの子供にc_all_sを追加。
menu_btn_02.addEventListener(MouseEvent.CLICK,list_sound)

function list_sound(evt:MouseEvent):void{
c_space.addChild(c_all_s);
c_space.removeChild(c_all_w);
}

------------------------------------------------------*


以上のようなエラーが出てしまっても問題無いのでしょうか。。。



野中文雄
Åê¹ÆNo.43680
投稿日時: 2009-10-11 8:35
ちょんまげら
居住地: 東京
投稿: 4166
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
まず、以下のテスト用ステートメントを追加したり、コメントアウトして、その結果をお確かめください。そしてつぎに、私の先の回答の[追記]を、もう1度お読みください。
引用:
riedynaさんは書きました:
以下のように組み直しいたしましたが、一応入れ替え出来るのですが、

ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。
at flash.display::DisplayObjectContainer/removeChild()
at m_btn_01_05/list_works()
”というエラーが出てしまいます。
//まずc_spaceというmcを生成。
var c_space:MovieClip = new MovieClip();
MovieClip(parent).addChild(c_space);
c_space.x = 0;
c_space.y = 0; 

var c_all_s:all_contents_sound = new all_contents_sound();
var c_all_w:all_contents_works = new all_contents_works();

// menu_btn_01を押したら、c_spaceの子供にc_all_wを追加。
// menu_btn_01.addEventListener(MouseEvent.CLICK,list_works) 
// c_space.addChild(c_all_s);  // テスト用ステートメント
// function list_works(evt:MouseEvent):void{
c_space.addChild(c_all_w);
c_space.removeChild(c_all_s);
// }


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

えり
Åê¹ÆNo.43686
投稿日時: 2009-10-13 14:00
新米
居住地:
投稿: 15
使用環境:
win,mac
Flash CS4
Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
ありがとうございました!
ヘルプもアドバイスも拝見いたしまして、


頂きましたヒントにて、numChildrenプロパティにて子オブジェクトの数を調べながら、常にnumChildrenプロパティが1を返しているのを
確認しまして、以下のスクリプトでできました。
しかし
なんとも苦し紛れなスクリプトでございます・・・・・・。
怒られそうですが山カン的になってしまいました。(泣)

---------------------------------------------*
var c_space:MovieClip=new MovieClip();
MovieClip(parent).addChild(c_space);
c_space.x=0;
c_space.y=0;

var c_all_s:all_contents_sound = new all_contents_sound();
var c_all_w:all_contents_works = new all_contents_works();



menu_btn_01.addEventListener(MouseEvent.CLICK,list_works);
function list_works(evt:MouseEvent):void {

c_space.addChild(c_all_w);
c_space.removeChildAt(0);
c_space.addChild(c_all_w);
// if (contains(c_all_s)) c_space.removeChild(c_all_s);
trace(c_space.numChildren);
}


menu_btn_02.addEventListener(MouseEvent.CLICK,list_sound);
function list_sound(evt:MouseEvent):void {

c_space.addChild(c_all_s);
c_space.removeChildAt(0);
c_space.addChild(c_all_s);
// if (contains(c_all_w)) c_space.removeChild(c_all_w);
trace(c_space.numChildren);
}


-------------------------------------------*

しかしながら2回も記述している、
c_space.addChild(c_all_s);
c_space.addChild(c_all_w);
は書きたくないのですが、、これが無いと
MCの追加が(+−ゼロになってしまう??)されません。。

もう少しヒントをいただけませんでしょうか。。。

お忙しい中誠に誠に恐縮です。。



野中文雄
Åê¹ÆNo.43688
投稿日時: 2009-10-13 18:04
ちょんまげら
居住地: 東京
投稿: 4166
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
「テスト用」ステートメントは、あくまでエラーの理由を考えるためのものです。その原因はおわかりになりましたか?
引用:
Fumioは書きました:
// c_space.addChild(c_all_s);  // テスト用ステートメント
// function list_works(evt:MouseEvent):void{
c_space.addChild(c_all_w);
c_space.removeChild(c_all_s);
// }

「ヒント」はすでに申し上げたとおり、「子どもがいるかどうかは、 DisplayObjectContainer.numChildrenプロパティで調べられ」るということです。
引用:
riedynaさんは書きました:
しかしながら2回も記述している、
c_space.addChild(c_all_s);
c_space.addChild(c_all_w);
は書きたくないのですが、、これが無いと
MCの追加が(+−ゼロになってしまう??)されません。。

もう少しヒントをいただけませんでしょうか。。。

[追記] あるいは、DisplayObjectContainer.contains()メソッドでも、対応できるのではありませんか?
引用:
riedynaさんは書きました:
function list_works(evt:MouseEvent):void {
	// c_space.addChild(c_all_w);
	// c_space.removeChildAt(0);
	c_space.addChild(c_all_w);
	if (contains(c_all_s)) c_space.removeChild(c_all_s);
	trace(c_space.numChildren);
}


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

えり
Åê¹ÆNo.43694
投稿日時: 2009-10-14 11:40
新米
居住地:
投稿: 15
使用環境:
win,mac
Flash CS4
解決いたしました!__Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
せんせい!
以下で解決いたしました!

============================================*

menu_btn_01.addEventListener(MouseEvent.CLICK,list_works);
function list_works(evt:MouseEvent):void {

c_space.addChild(c_all_w);
if (c_space.numChildren==2){
c_space.removeChildAt(0);
}

}

============================================*

教えて頂きました便利なnumChildrenプロパティと、

メソッドはremoveChildAt()の方を使い、
if文でシンプルに出来ました!!


いろいろaddChild()にて表示リストに追加した子供の入れ替え
や、addChild()の入れ子コンテンツなど、がんばって練習いたしてみたいと思います!!


本当に貴重なお時間をくだすってありがとうございました。
感激です!!!


ひろゆき
Åê¹ÆNo.43695
投稿日時: 2009-10-14 11:46
ちょんまげら
居住地: 大阪密林
投稿: 3492
使用環境:
10.3.9
Flex 2 SDK

Pro8.0
Pro7.2
FlashPlayer
7.0r24/8.0r24/9.0r115
Safari 1.3.2
Firefox 2.0.0.20

MacOS 9.2.2
Flash 4/5
Re: 解決いたしました!__Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
menu_btn_01.addEventListener(MouseEvent.CLICK,list_works);
function list_works(evt:MouseEvent):void {
	c_space.addChild(c_all_w);
	if (c_space.contains(c_all_s)) c_space.removeChild(c_all_s);
}
でもいいのでは?


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

野中文雄
Åê¹ÆNo.43696
投稿日時: 2009-10-14 12:26
ちょんまげら
居住地: 東京
投稿: 4166
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: 解決いたしました!__Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
あ、私の前の回答の[追記]では、DisplayObjectContainer.contains()メソッドでインスタンスc_spaceを参照していませんでした。それでも、動作はするのですが、参照は限定した方が安心ですね。
引用:
mayorさんは書きました:
	if (c_space.contains(c_all_s)) c_space.removeChild(c_all_s);
でもいいのでは?


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

ひろゆき
Åê¹ÆNo.43697
投稿日時: 2009-10-14 12:36
ちょんまげら
居住地: 大阪密林
投稿: 3492
使用環境:
10.3.9
Flex 2 SDK

Pro8.0
Pro7.2
FlashPlayer
7.0r24/8.0r24/9.0r115
Safari 1.3.2
Firefox 2.0.0.20

MacOS 9.2.2
Flash 4/5
Re: 解決いたしました!__Re: addChild()にて表示リストに追加したmcを入れ替えたい。【removeChild();が効きません。】
引用:
Fumioさんは書きました:
あ、私の前の回答の[追記]では、DisplayObjectContainer.contains()メソッドでインスタンスc_spaceを参照していませんでした。それでも、動作はするのですが、参照は限定した方が安心ですね。

DisplayObjectContainer.contains() で、子だけでなく、孫、ひ孫, ... と true を返すんですね。
ヘルプを見てはいましたが、見落としておりました。


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

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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