【问题标题】:Flash Actionscript 3 & Oscillating Object Alpha AnimationFlash Actionscript 3 和振荡对象 Alpha 动画
【发布时间】:2009-04-09 15:34:57
【问题描述】:

我将如何通过 Flash 中的 Actionscript 制作动画,如下所示?:

我的舞台上散布着几个带有随机 Alpha 值的正方形。当电影加载时,我希望每个方块平滑地动画到它们当前的 alpha 值为零,然后到 1,并无限期地重复循环。

作为奖励,我希望能够让每个方块在 alpha=1 时停顿一段时间,然后再继续循环。

我从一个在线教程中收集到,我应该将我的正方形 (ImageTile) 设置为一个对象:

package {

    import flash.display.*;
    import flash.events.*;

    public class ImageTile extends MovieClip {

        var tileAlpha = this.alpha;

        public function ImageTile() {
            // construct here
            this.addEventListener(Event.ENTER_FRAME, AnimateTile);
        }

        function AnimateTile(e:Event) {
            // animation to go here
        }

    }

}

...但是我想做什么的数学让我无法理解。任何帮助将不胜感激!

【问题讨论】:

    标签: flash actionscript-3 animation


    【解决方案1】:

    可能是Dissolve 效果或Fade(页面底部都带有示例和代码)。我相信您会希望这些效果按顺序播放(可能不需要在 ActionScript 中对其进行编码)。然后为了让它保持在 alpha=1,我会在效果中添加一个事件并检查它的 alpha 值,然后设置延迟或暂时暂停动画。我运行了一个简单的测试,只是为 alpha 值设置动画,它似乎可以工作。

    您可以将 repeatCount 设置为 0 以无限期播放效果,并设置 repeatDelay 以使其保持最终的 alpha 值(然后您可能不必添加任何额外的事件处理程序)。

    var eff : Dissolve = new Dissolve();
    eff.alphaFrom = ...;
    eff.alphaTo = 0;
    // set repeatCount & repeatDelay if necessary
    eff.play([list of targets]);
    

    【讨论】:

    • 我注意到您引用的两个 livedocs 是针对 Flex 3 AS3 的; Flash CS4 AS3 是否完全一样?
    • 我认为 AS3 对两者都是相同的,但某些功能可能会受到限制(就像 AIR 和 Flash 一样)。查看大多数 AS3 文档都指向 Flex3 AS3。给它并尝试让我知道。
    【解决方案2】:

    好的,所以我设法使用两个计时器大致弄清楚我想要什么:

    package {
    
    import flash.display.MovieClip;
    import flash.events.*;
    import gs.TweenLite;
    import fl.motion.easing.*;
    import flash.utils.Timer;
    
    public class ImageTile extends MovieClip {      
    
        public function ImageTile() {
            var atimer:Timer = new Timer(Math.floor(Math.random()*20*1000),1);
            atimer.addEventListener(TimerEvent.TIMER, initSquares);
            atimer.start();
        }
    
        function initSquares(e:Event) {
            //trace("should be 15 of these, no more!");
            var timer:Timer = new Timer(10000);
            timer.addEventListener(TimerEvent.TIMER, fade);
            timer.start();
        }
    
        function fade(e:Event) {
            TweenLite.to(this, 2, {alpha:Math.random()});
        }
    
    }
    
    }
    

    基本上,我的主要要求是每个方块都以固定的间隔进行淡入淡出动画,并且它们都不会以相同的间隔进行。我确信这并不像它应该的那样干净,所以任何重构都将不胜感激。

    我还要注意,我正在使用 TweenLite 库进行渐变。

    【讨论】:

      【解决方案3】:

      您可能可以摆脱计时器,但老实说,它不会改变太多。

      import fl.motion.easing.*;
      
      import flash.display.MovieClip;
      import flash.events.*;
      import flash.utils.Timer;
      import flash.utils.setInterval;
      import flash.utils.setTimeout;
      
      public class ImageTile extends MovieClip {              
      
          public function ImageTile() 
          {
              flash.utils.setTimeout(initSquares, Math.floor(Math.random()*20*1000);
          }
      
          function initSquares() 
          {
                  flash.utils.setInterval(fade, 10000);
          }
      
          function fade() 
          {
                  TweenLite.to(this, 2, {alpha:Math.random()});
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 2012-04-11
        相关资源
        最近更新 更多