0

我正在使用 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;
        }
    }
}

谢谢!

4

3 回答 3

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;
            }
        }
    }
}
于 2012-12-14T15:13:08.947 回答
0

创建 10 个球

  1. 去除private var ball:Ball;
  2. var ball:Ball;在 init 方法中添加 a ,就在for之前。

如果您不这样做,那么属于您的 Main 类的ball对象只会在您的循环中更新 10 次,但您仍然只能得到一个对象。

动画 10 个球

您必须将您的球保存在一个容器中,该容器必须属于您的 Main,因为您要从您班级的几个功能中访问它。

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;
            }
        }
    }
}
于 2012-12-14T15:19:52.443 回答
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
    }
  }
}

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

于 2012-12-14T16:31:42.140 回答