2012-04-11 5 views
2

ActionScript 3では、図の中に純粋なテキストとしてデータを出力するプロジェクトで問題があります。しかし、これは問題ではありません。問題は、ユーザーが表示したいデータのタイプを変更したときです。私は、現在表示されている図の列を削除し、新しい列を追加します。しかし、私のコードでは、すべての列が削除されているため、ダイアグラムはまったくありません。シーンのオブジェクトのインスタンスだけを削除する

私はこれをFlash CS5ですべて行いました。この列は、ステージに追加したオブジェクトのインスタンス(四角形)です。すべてのインスタンスがコンテナ「コンテナ」に追加されます。作品

var container = new Sprite(); // The container for my diagram 
function emptyContainer() { 
if (container.numChildren > 0) { 
    container.removeChildAt(0); 
    } 
} 

どの:私はそれらを削除し、私が使用して新しいものを追加したいときに。

ユーザー入力に基づいて異なる列を追加するswitch文があります。オブジェクト(矩形)の名前は「灰色」です。インスタンスの名前は「シュトルペ」 (つまり、これらの奇妙な言葉との契約ですので、私は、道によるノルウェー)午前

function fChange(event:Event) { 
textToBeReturned = ""; 

    switch (treCbox.selectedItem.label) { 
case "Furu": 
    for (var a = 1; a < table.length; a++){ 
     textToBeReturned += "I år: " + table[a][0] + " - " + table[a][1] + " millioner trær." + "\n"; 
     // Diagram 
     var stolpe = new soyle; 
     stolpe.width = table[a][1]; 
     stolpe.x = 20; 
     stolpe.y = 100 + (a * 30); 
     container.addChild(stolpe); 

     // Description for the columns 
     var textbox = new TextField; 
     textbox.text = "År " + table[a][0]; 
     textbox.x = stolpe.width + 30; 
     textbox.y = stolpe.y; 
     container.addChild(textbox); 
    } 
    break; 
case "Gran": 
    for (var b = 1; b < table.length; b++){ 
     textToBeReturned += "I år: " + table[b][0] + " - " + table[b][2] + " millioner trær." + "\n" ; 

     var stolpe = new soyle; 
     stolpe.width = table[b][1]; 
     stolpe.x = 20; 
     stolpe.y = 100 + (b * 30); 
     container.addChild(stolpe); 

     // Description for the columns 
     var textbox = new TextField; 
     textbox.text = "År " + table[b][0]; 
     textbox.x = stolpe.width + 30; 
     textbox.y = stolpe.y; 
     container.addChild(textbox); 
    } 
    break; 
case "Lauvtre": 
    for (var c = 1; c < table.length; c++){ 
     textToBeReturned += "I år: " + table[c][0] + " - " + table[c][3] + " millioner trær." + "\n" ; 

     var stolpe = new soyle; 
     stolpe.width = table[c][1]; 
     stolpe.x = 20; 
     stolpe.y = 100 + (c * 30); 
     container.addChild(stolpe); 

     // Description for the columns 
     var textbox = new TextField; 
     textbox.text = "År " + table[c][0]; 
     textbox.x = stolpe.width + 30; 
     textbox.y = stolpe.y; 
     container.addChild(textbox); 
    } 
    break; 
} 
txtReturn.text = textToBeReturned; 
}; 

私はちょうどそれらを削除するには、すべての子を除去するための私の機能を配置する場所を不思議です以前に追加された子供。私が関数を配置する場所(fChangeの始めに、各ケースの始めに)には、新しいものか古いものかを示すダイアグラムはありません。

もちろんデータが入っている配列はありますが、私はそれは無関係なので投稿しません。

お時間をいただきありがとうございました! :)

答えて

2

ここにいくつかの問題があります。私はスイッチ内に新しい子供を追加する前に、あなたのコンテナMCからすべての子供を取り除きたいと思っています。

あなたの関数emptyContainerは実際にすべての子を削除するわけではありませんが、それは1つだけを削除します(これは、次回は、あなたの作業のコードを投稿しようとしています。これはループの内側にある必要があります。

function emptyContainer() { 
    while (container.numChildren > 0) { //changed the if to a while. This will run until there are no children left in container 
     container.removeChildAt(0); 
    } 
} 

あなたは、このアウトを試してみて、私はそれがどのように動作するか知っているよう

function fChange(event:Event) { 
    emptyContainer() 

    /* rest of function */ 

} 

あなたfChanged関数の内部で、この最初のものを呼び出したいとしています。

+0

チップをありがとうが、動作しません。 fChangeの先頭に関数emptyContainerを配置すると、常にコンテナ内のすべてが削除されます。 私はwhileループの中にテストを入れました、ありがとう! – Esso

+1

には、addChild()を使用して、いつでもステージにコンテナが追加されていますか? – francis

+0

私たちはそれを持っています。どうもありがとう! – Esso

関連する問題