如何删除For循环中的所有对象?

时间:2015-06-21 06:30:13

标签: actionscript-3 for-loop flash-cs6

嘿所有人所以我知道这必须非常简单我过度复杂并无法弄清楚如何去做。所以我在startScreen中让这些星星在后台移动,我希望在游戏开始时移除它们。

以下是我如何在我的主类中设置它们:

             public  var numStars:int = 4;

            //Add star background to startscreen only 
            for (var i:int = 0; i < numStars; i++)
            {
                stage.addChild(new mcStar(stage));
            }

在我的mcStar班级中我有这段代码:

public class mcStar extends MovieClip 
{

    private var stageRef:Stage;
    private var starSpeed:Number;


    public function mcStar(stageRef:Stage)
    {
        this.stageRef = stageRef;
        setupStar(true);

        addEventListener(Event.ENTER_FRAME, loop, false, 0, true); 
    }


    public function setupStar(randomizeY:Boolean = false) : void
    {
        //Pick the frames for start position
        var nRandom:Number = randomNumber(1, 3);
        //Setup goto and stop on timeline
        this.gotoAndStop(nRandom);

        //inline conditional, looks complicated but it's not.
        y = randomizeY? Math.random()*stageRef.stageHeight : 480;
        x = Math.random()*stageRef.stageWidth;
        alpha = Math.random();
        //rotation = Math.random()*360;
        //scaleX = Math.random();
        //scaleY = Math.random();


        starSpeed = 2 + Math.random()*2;
    }

    public function loop(e:Event) : void
    {
         y -= starSpeed;

        if (y <= stage.stageHeight / 2)
            setupStar();

    }

    public function destroyStar():void
    {
        if (this.parent)
        {
            parent.removeChild(this);
            removeEventListener(Event.ENTER_FRAME, setupStar);
            removeEventListener(Event.ENTER_FRAME, loop);
        }

    }

    //Generates a truly "random" number
    function randomNumber(low:Number=0, high:Number=1):Number
    {
      return Math.floor(Math.random() * (1+high-low)) + low;
    }


}

所以我想要完成的是在我的Main类中当用户按下start并且我删除了startScreen我想要删除所有的开始并停止产生。但我无法弄清楚如何去除它们。当我尝试时,我总是得到一个必须是来电者的孩子等...

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

添加星星时,将星星存储在数组中。所以你以后可以参考它们。

destroyStar - 函数不是最佳做法,因为明星本身不应该有权更改主要显示列表中的内容。最好直接在Main中删除它。

主要

public  var numStars:int = 4;
private var stars:Array = [];

initStars();

function initStars():void{
    for (var i:int = 0; i < numStars; i++)
    {
        var star:mcStar = new mcStar(stage);
        addChild(star);
        stars.push(star);
    }
}
function removeAllStars():void{
    for each(var star:mcStar in stars){
       if(contains(star)) {
           star.destroy();
           removeChild(star);
       }
    stars=[];
}  

<强> mcStar

 //better name for this class would be McStar for better readability
 public function destroyStar():void
 {
      removeEventListener(Event.ENTER_FRAME, setupStar);
      removeEventListener(Event.ENTER_FRAME, loop);
 }

此外,您不需要将舞台传递给构造函数。如果在舞台上添加mcStar - 实例,您可以使用this.stage

引用舞台(仅存在一个舞台)

问候。