2017-01-01 11 views
2

私は、すべてのMovieClip、Sprites、およびグラフィックを含むシーンを持っています。これらのシーンの一部は、addChild(...)を使用してステージに持ち込みます。AS3のシーンからすべてのムービークリップ、スプライト、グラフィックスを削除するにはどうすればよいですか?

私は他のシーンに行くときに私はまだそれらを見ることができるので、私はそれらのすべてを削除したいと思います。

私はコードの下に使用しているが、それは私に下記のエラーが表示されます。

btn.addEventListener(MouseEvent.CLICK,removing); 

function removing(e:MouseEvent):void 
{ 
    while (stage.numChildren > 0) 
    { 
    stage.removeChildAt(0); 
    } 

} 

エラー:

はTypeError:エラー#1009:nullのオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at Show_fla :: MainTimeline/removing()

お時間をいただきありがとうございました!それが示すように

答えて

2

、それはwhileループで動作していない、それはループのために働いている|:

btn.addEventListener(MouseEvent.CLICK,removing); 

function removing(e:MouseEvent):void 
{ 
var i:int = 0; 
for (i=stage.numChildren-1; i>=0; i--) 
{ 
    stage.removeChildAt(i); 
} 
} 
1

財産DiaplayObject.stageはONLY指定されたDisplayObjectが実際にステージに接続されている間に定義されます。削除コードを保持しているSprite/MovieClipを削除すると、ステージがnullに変更され、次の状態チェックstage.numChildrenが自然に失敗します。ステージへの参照はローカル変数に保持する必要があります。

btn.addEventListener(MouseEvent.CLICK,removing); 

function removing(e:MouseEvent):void 
{ 
    var aStage:Stage = stage; 

    while (aStage.numChildren > 0) 
    { 
    aStage.removeChildAt(0); 
    } 
} 
+0

で は、このエラーを回避するが、あまりにも[オブジェクトMainTimeline]を削除します。 したがって、最初のループの後に子がなくなります。 @Organis – tatactic

1

あなたが削除されたオブジェクトのトレースを追加する場合は、あなたも、ループを必要としないようにするには、[オブジェクトMainTimeline]を削除していることがわかります。

あなたのコードであなたは[オブジェクトMainTimeline]を削除し、すべてのクリップが削除されます。 whileループでは、forループにNot Errorをスローします。

function removing(e:MouseEvent):void { 
    var i:int = 0; 
    for (i=stage.numChildren-1; i>=0; i--) 
    { 
     trace("removing : " + (stage.getChildAt(i))); 
     stage.removeChildAt(i); 
    } 
} 

出力:

removing : [object MainTimeline] 

だからあなたがオブジェクト[オブジェクトMainTimeline]を削除し、削除するためにこれ以上の子供がいます。

function removing(e:MouseEvent):void { 
    trace("removing : " + (stage.getChildAt(0))); 
    stage.removeChildAt(0); 
} 

は、おそらくあなたに同じ出力が得られます:

removing : [object MainTimeline] 

[オブジェクトMainTimeline]が削除されるのであればあなたも、ループを必要としません。

私は同じ条件でテストしなかったので、同じ出力があるかどうか教えてください。削除

は、私はあなたがdifference between stage, root and main timeline

[EDIT]

function removingWhile(e:MouseEvent):void { 
    while (stage.numChildren > 0){ 
    count++; 
    trace("removing : " + (stage.getChildAt(0))); 
    trace ("number of iterations = " + (count++).toString()) 
    stage.removeChildAt(0); 
    } 
} 

ウィル出力を説明し@LukeVanInからの回答を確認することをお勧め[オブジェクトMainTimeline] 反復回数= 1

TypeError:Error#1009 ...Untitled_fla :: MainTimeline/removingWhile()

[/ EDIT]

+0

@Maziar私は本当にあなたのケースで出力パネルが出力するものを知りたいです。 私はおそらく間違っていますが、これはいくつかのtrace()関数でコードをテストしたり、try ... catchブロックを試してみるとよいでしょう。 – tatactic

関連する問題