2017-05-02 10 views
0

私は "庭を育てる"をクリックすると、ランダムな数の花と雑草の乱数を生成するプロジェクトに取り組んでいます。彼らが「成長する」シーケンスを完了すると、ユーザーは花/雑草が舞台から削除され、新たに始まる「新しい庭を育てる」ことが提示される。ボタンプレスで子/スプライトを削除する方法は?

私は自分の脳を詰まらせており、これは私が「子供を取り除く」ために来た最も近いものです。どんなヘルプ/ガイダンスも大歓迎です。

**編集コードIは、古いファイルをコピーしたとして**

import flash.events.MouseEvent; 
import flash.display.DisplayObject; 

// stops the playhead on frame 1 
stop(); 

// random amount of flowers generated 
var flowerAmount:int = (Math.ceil((Math.random() * 20)) + 9); 
var weedAmount = Math.ceil((Math.random() * 10)); 


// garden display container 
var newGarden:DisplayObjectContainer; 

// setting new flower variable equal to the function that creates an instance of the flower 
var newFlower_mc:DisplayObject = newFlower(); 

// flowers currently in the garden 
var flowersInGarden:int = 0; 
var weedsInGarden:int = 0; 


// event listener for the grow button to start the garden 
grow_btn.addEventListener(MouseEvent.MOUSE_UP, frameTwo); 

// when grow button is clicked go to frame two 
function frameTwo(event:MouseEvent) { 
    gotoAndPlay(2); 
} 

// changes the size and position of the flower 
function configureFlower(myFlower_mc:DisplayObject) { 
    myFlower_mc.x = Math.random() * 400; 
    myFlower_mc.y = Math.random() * 200; 
    var flowerSize:Number = Math.random() + .5; 
    myFlower_mc.height = myFlower_mc.height * flowerSize; 
    myFlower_mc.width = myFlower_mc.width * flowerSize; 
} 
import flash.display.DisplayObject; 

// function to create new instance of a flower 
function newFlower():DisplayObject { 
    var newFlower_mc:DisplayObject = new flower(); 
    return newFlower_mc; 
} 

// function to call the create flower function and add flower to sprite 
function createFlower() { 
    var myFlower_mc = newFlower(); 
     configureFlower(myFlower_mc); 
     newGarden.addChild(myFlower_mc); 
    trace(flowerAmount); 
    } 

newGarden = new Sprite(); 

// adds the flower to the stage/sprite and adds to the flower counter 
    function showFlowers() { 
    createFlower(); 
    addChild(newGarden); 
    flowersInGarden++; 
    trace("Flowers:" + flowersInGarden + " " + weedAmount + " weedsingarden" + weedsInGarden); 


} 
// calls the above function 
showFlowers(); 


// function to create a weed, configure weed and add to the garden sprite 
function createWeed(){ 
    var newWeed:DisplayObject; 
    trace("creating weed"); 
    newWeed = new weed(); 
    newGarden.addChild(newWeed); 
    configureFlower(newWeed); 
    weedsInGarden++; 
}// if all the flowers haven't grown yet, go back to frame 2 until they have 

if (flowersInGarden < flowerAmount) { 
    gotoAndPlay(2); 
} 

// if the amount of weeds decided haven't grown yet, create another weed 

if (weedsInGarden < weedAmount){ createWeed(); }; 
stop(); 

// event listener to grow a new garden 
new_btn.addEventListener(MouseEvent.MOUSE_UP, growNewGarden); 


// function to create a new garden if there are more than 1 instance in the container 
function growNewGarden(event:MouseEvent) { 
    while (newGarden.numChildren > 0) { 
    stage.removeChild(newFlower_mc); 
     stage.removeChild(newGarden); 
     // add a new, fresh sprite 
     stage.addChild(newGarden); 
     // randomly chooses a number of flowers 
     flowerAmount = (Math.ceil((Math.random() * 21)) + 10); 
     // resets flower counter to zero 
     flowersInGarden = 0; 
    gotoAndPlay(2); 

}} 

答えて

1

あなたはあなたが変数として子インデックスを使用しなければならない、をループにあなたの財産としてnumChildrenプロパティを使用しようとしている場合子を選択するループ。あなたがしたことは、子どもをループしてnewFlower_mcなどのものを削除しようとしていることです。その変数はその機能の範囲内で何も意味しません。

for (var i:int = newGarden.numChildren - 1; i >= 0; i--){ 
    var f:DisplayObject = newGarden.getChildAt(i); 
    f.parent.removeChild(f); 
} 

このようになります。

私は、庭を取り除くのがはるかに簡単だと思うし、すべての雑草や花は庭の子供だから、取り除かれることもあるだろう。単純に:

newGarden.parent.removeChild(newGarden); 

voila!

また、あなたのvar newFlower_mc = newFlower();についてのちょっとしたメモです。それが何をしているのか分かりません。関数に等しい変数を設定していません。その変数を出力に等しいか、その関数の結果を1回呼び出すように設定しています。そのコード行は、次のようになります。

  1. newFlower_mcという名前の変数を宣言します。
  2. すべてが順調と良いのですが、あなたが問題を持っていることを変数newFlower_mc

にしたDisplayObjectインスタンスを返さDisplayObject

  • セットを返すコンストラクタ関数newFlower()を呼び出します。後で、コンストラクタ関数でnewFlowerの場合は、すでに使用されている名前の別の変数...を宣言します。newFlower_mc。これは悪いです。私は結果が何であるか分かりません。フラッシュが何らかの理由でこれをコンパイルしてエラーなしで実行できるのであれば、私は驚いていますが、いずれにしてもそれは悪い習慣です。変数=を関数に設定すると何が起こるのか理解していないと思います。私の説明が助けてくれることを願う。

  • +0

    私の教科書の前の例のコードを取ったので、おそらく私はそれを誤って適用しました。 私は午前中に見ています - 詳細な答えを与えるためにあなたの日から時間を取っていただきありがとうございます - 非常に感謝! – Lexii

    関連する問題