使用for循环动画?

时间:2012-12-14 14:43:53

标签: actionscript-3 for-loop

我正在使用for循环向舞台添加多个对象,从那里我想为它们设置动画但是当我尝试只有一个球移动时。

这是我的代码。

(球从外部班级拉出来)

package
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite
    {

        private var ball:Ball;
        private var ax:Number = 4;

        public function Main()
        {
            init();
        }
        private function init():void
        {
            for(var i:Number = 0; i < 10; i++)
            {
                ball = new Ball();
                ball.x = Math.random() * stage.stageWidth;
                ball.y = Math.random() * stage.stageHeight;
                addChild(ball);
            }

            addEventListener(Event.ENTER_FRAME, onEnterFrame1);
        }
        private function onEnterFrame1(event:Event):void
        {
            ball.x += ax;
        }
    }
}

谢谢!

3 个答案:

答案 0 :(得分:2)

您应该将所有对象推入数组并更改每个球的x属性。

package
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite
    {
        private var ball:Ball;
        private var ax:Number = 4;

        private var balls:Array;

        public function Main()
        {
            init();
        }

        private function init():void
        {
            balls = new Array();
            for(var i:Number = 0; i < 10; i++)
            {
                ball = new Ball();
                ball.x = Math.random() * stage.stageWidth;
                ball.y = Math.random() * stage.stageHeight;
                addChild(ball);

                balls.push(ball);
            }

            addEventListener(Event.ENTER_FRAME, onEnterFrame1);
        }
        private function onEnterFrame1(event:Event):void
        {
            for(var i:int = 0; i < balls.length; i++)
            {
                balls[i].x += ax;
            }
        }
    }
}

答案 1 :(得分:0)

创建10个球

  1. 删除private var ball:Ball;
  2. 在init方法中添加var ball:Ball;,在之前添加juste
  3. 如果你不这样做,属于你的Main类的 ball 对象在你的循环中只更新了10次,但你仍然只得到一个对象。

    动画10个球

    你必须将球保存在一个容器中,因为你要从你班上的几个功能中访问它,所以必须属于你的主。

    package
    {
        import flash.display.MovieClip;
        import flash.events.Event;
    
        public class Main extends MovieClip
        {
            private var ballsContainer:MovieClip;
            private var ax:Number;
    
            public function Main()
            {
                init();
            }
    
            private function init():void
            {
                ax = 4;
    
                ballsContainer = new MovieClip();
                addChild(ballsContainer);
    
                var ball:Ball;
                for (var i:Number = 0; i < 10; i++)
                {
                    ball = new Ball();
                    ball.x = Math.random() * stage.stageWidth;
                    ball.y = Math.random() * stage.stageHeight;
                    ballsContainer.addChild(ball);
                }
    
                addEventListener(Event.ENTER_FRAME, onEnterFrame1);
            }
    
            private function onEnterFrame1(event:Event):void
            {          
                for (var i:Number = 0; i < ballsContainer.numChildren; i++)
                {
                    Ball(ballsContainer.getChildAt(i)).x += ax;
                }
            }
        }
    }
    

答案 2 :(得分:0)

你可以让球处理它自己的运动。

package
{
  import flash.display.MovieClip;
  import flash.events.Event;
  import flash.utils.getTimer;
  public class Ball extends MovieClip {
    private var currentTime = getTimer();
    public function Ball(){
       addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }
    private function onEnterFrame1(event:Event):void {
      diff = currentTime - prevTime;
      x += diff *  ax 
      prevTime = currentTime;//update for next go around
    }
  }
}

那么,为什么要使用计时器而不是帧来制作动画?嗯,你不必,但你不能总是确定两帧之间的时间。在这种情况下,即使您的帧速率不是这样,您的速度也始终保持不变。