Actionscript 3 使用for循环设置动画?

Actionscript 3 使用for循环设置动画?,actionscript-3,for-loop,Actionscript 3,For Loop,我使用for循环将多个对象添加到舞台上,从那里我想设置它们的动画,但当我尝试只移动一个球时 这是我的密码 (球从外部类中拉出) 包 { 导入flash.display.Sprite; 导入flash.events.Event; 公共类Main扩展了Sprite { 私人var球:球; 私有变量ax:Number=4; 公共功能Main() { init(); } 私有函数init():void { 对于(变量i:Number=0;i

我使用for循环将多个对象添加到舞台上,从那里我想设置它们的动画,但当我尝试只移动一个球时

这是我的密码

(球从外部类中拉出)

包
{
导入flash.display.Sprite;
导入flash.events.Event;
公共类Main扩展了Sprite
{
私人var球:球;
私有变量ax:Number=4;
公共功能Main()
{
init();
}
私有函数init():void
{
对于(变量i:Number=0;i<10;i++)
{
球=新球();
ball.x=Math.random()*stage.stageWidth;
ball.y=Math.random()*stage.stageHeight;
addChild(ball);
}
addEventListener(Event.ENTER_FRAME,onEnterFrame1);
}
私有函数onEnterFrame1(事件:事件):void
{
ball.x+=ax;
}
}
}

谢谢大家!

您应该将所有对象推入数组,并更改每个球的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;
            }
        }
    }
}
包
{
导入flash.display.Sprite;
导入flash.events.Event;
公共类Main扩展了Sprite
{
私人var球:球;
私有变量ax:Number=4;
私有变量球:数组;
公共功能Main()
{
init();
}
私有函数init():void
{
balls=新数组();
对于(变量i:Number=0;i<10;i++)
{
球=新球();
ball.x=Math.random()*stage.stageWidth;
ball.y=Math.random()*stage.stageHeight;
addChild(ball);
推(球);
}
addEventListener(Event.ENTER_FRAME,onEnterFrame1);
}
私有函数onEnterFrame1(事件:事件):void
{
对于(变量i:int=0;i
创建10个球

  • 移除
    private-var-ball:ball
  • 添加一个
    var-ball:ball
    如果不这样做,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;
                }
            }
        }
    }
    
    包
    {
    导入flash.display.MovieClip;
    导入flash.events.Event;
    公共类Main扩展了MovieClip
    {
    私人var ballsContainer:MovieClip;
    私有变量ax:数量;
    公共功能Main()
    {
    init();
    }
    私有函数init():void
    {
    ax=4;
    ballsContainer=新电影剪辑();
    addChild(ballsContainer);
    var球:球;
    对于(变量i:Number=0;i<10;i++)
    {
    球=新球();
    ball.x=Math.random()*stage.stageWidth;
    ball.y=Math.random()*stage.stageHeight;
    ballsContainer.addChild(ball);
    }
    addEventListener(Event.ENTER_FRAME,onEnterFrame1);
    }
    私有函数onEnterFrame1(事件:事件):void
    {          
    for(变量i:Number=0;i
    你可以让球自己控制自己的运动

    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
        }
      }
    }
    

    那么,为什么要使用计时器而不是帧来设置动画呢?嗯,你不必这么做,但你不能总是确定两帧之间的时间。在这种情况下,您的速度总是恒定的,即使您的帧速率不是恒定的

    如果您这样做,您将得到错误,因为您不能将init()中的局部变量用于另一个方法。在这种情况下,使用MovieClip而不是Array是过分的。;)在大多数情况下,这是过分的,除非你想旋转/平移/缩放一定数量的所有球。然后你可以使用movieclipOr,在这种情况下,
    Sprite
    更合适。哦,onEnterFrame1是一个糟糕的命名。在给出示例代码时,您可以立即修复它;)谢谢你的工作!!!好的,那么为什么我们要把球推到球阵列中呢?这是因为数组可以包含多个对象吗?好的,在onEnterFrame1函数中还有一件事,为什么我们要把ipackage { 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 } } }