【问题标题】:AS3 animate dynamically created movie clips with ENTER_FRAMEAS3 使用 ENTER_FRAME 对动态创建的影片剪辑进行动画处理
【发布时间】:2018-09-06 19:46:15
【问题描述】:

我有一些代码可以从库中加载一个影片剪辑,对其进行复制并以不同的大小、位置和旋转将其散布在舞台上。我想不通的是如何使用 ENTER_FRAME 事件侦听器为每一个设置动画 - 所以也许我也可以为比例、位置和旋转设置动画?非常感谢任何帮助。谢谢。

for (var i = 0; i < 20; i++ )
{

    //Generate Item from library
    var MovieClip_mc:mcMovieClip = new mcMovieClip();
    addChild(MovieClip_mc);

    //Size
    var RandomSize = (Math.random() * 0.5) + 0.5;
    MovieClip_mc.scaleX = RandomSize;
    MovieClip_mc.scaleY = RandomSize;

    //Rotation
    var RandomRotation:Number = Math.floor(Math.random()*360);
    MovieClip_mc.rotation = RandomRotation;

    //Position
    MovieClip_mc.x = Math.floor(Math.random() * CanvasWidth);
    MovieClip_mc.y = Math.floor(Math.random() * CanvasHeight);

}

【问题讨论】:

    标签: actionscript-3 flash actionscript adobe-animate


    【解决方案1】:

    您实际上不需要从外部执行此操作。您可以在第一帧中使用自己的脚本对其进行动画处理,这样每个实例都会被动画化:

    addEventListener(Event.ENTER_FRAME, onFrame);
    
    function onFrame(e:Event):void
    {
        // Math.random() - 0.5 will produce a random value from -0.5 to 0.5
    
        x += Math.random() - 0.5;
        y += Math.random() - 0.5;
    
        scaleX += (Math.random() - 0.5) / 10;
        scaleY = scaleX;
    
        rotation += (Math.random() - 0.5) * 5;
    }
    

    【讨论】:

      【解决方案2】:

      为了提高性能,最好使用一个 ENTER_FRAME 处理程序。该处理程序可以位于您的主类中,并通过调用在 mcMovieClip 类中声明的某些方法来更新每个 mcMovieClip 的属性。下面是一个简单的例子。

      主类

      var mcs:Array = [];
      for(var i:int = 0; i < 1; i++)
      {
          mcs.push(new mcMovieClip());
          addChild(mcs[i]);
      }
      addEventListener(Event.ENTER_FRAME, updateTime);
      
      function updateTime(e:Event):void
      {
          for(var j:int = 0; j < mcs.length; j++)
          {
              mcs[j].updatePosition(Math.random() * stage.stageWidth, 
                                    Math.random() * stage.stageHeight);
              mcs[j].updateRotation(Math.random() * 360);
              mcs[j].updateSize(Math.random());
          }
      }
      

      mcMovieClip 类

      function updateSize(size:Number):void
      {
          this.scaleX = this.scaleY = size;
      }
      function updateRotation(rot:Number):void
      {
          this.rotation = rot;
      }
      function updatePosition(newX:Number, newY:Number):void
      {
          this.x = newX;
          this.y = newY;
      }
      

      【讨论】:

      • 谢谢!是的,将所有影片剪辑添加到数组中似乎可行。好东西。 ?
      猜你喜欢
      • 2012-05-25
      • 2013-12-22
      • 2018-01-13
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2011-01-19
      • 2015-05-06
      • 2018-10-14
      相关资源
      最近更新 更多