【问题标题】:Wave-like animation on objects in AS3AS3 中物体上的波浪状动画
【发布时间】:2011-01-09 06:07:30
【问题描述】:

我有不同的卡片,我需要以波浪状的形式展示它们,即卡片在不同的时间顺序和系统地打开和关闭,从而形成波浪。

我已经将卡片放在数组中。如何以最有效的方式实现此动画?

【问题讨论】:

  • 你有你想要做什么的例子吗? “以波浪状的形式展示它们”有点模棱两可。
  • 我想打开一张卡,慢慢关闭,打开另一张卡,慢慢关闭...例如当我到达第4张卡时,第1张卡已经关闭...明白吗?

标签: flash actionscript-3 actionscript animation flash-cs4


【解决方案1】:

您应该习惯于使用 Math.sin() 和 Math.cos()。查看简单的三角函数并记住转换弧度和度数。一旦你很好地掌握了这些概念,你可以在不同的环境中重复使用许多很酷和有趣的技巧。下面的 sn-p 演示了如何以“类似波浪的形式”移动对象。它可能不是您正在寻找的东西,但它应该可以帮助您到达您想要去的地方。它是使用 CS4 IDE 在 AS3 中编写的。

var n:Number = 0;
var ball:MovieClip = new MovieClip();
ball.graphics.beginFill( 0xFFCC00, 1 );
ball.graphics.drawCircle( 0, 0, 15 );
addChild( ball );

ball.x = stage.stageWidth;
ball.y = stage.stageHeight * .5;

var prev:Point = new Point(ball.x, ball.y);

addEventListener( Event.ENTER_FRAME, onEnterFrameHanlder );

function onEnterFrameHanlder( event:Event ):void
{
    n+=3;
    ball.x = Math.cos( n * .25 * Math.PI/180 ) * ( stage.stageWidth * .5 ) + ( stage.stageWidth * .5 );
    ball.y = Math.sin( n * Math.PI/180 ) * ( stage.stageHeight * .5 ) + ( stage.stageHeight * .5 );

    graphics.lineStyle( 1, 0xFFCC00 );
    graphics.moveTo( ball.x, ball.y );
    graphics.lineTo( prev.x, prev.y );

    prev.x = ball.x;
    prev.y = ball.y;
}

【讨论】:

  • 感谢有趣的动画,但这不是我想要的。我想开一张卡,慢慢关,再开一张,慢慢关……比如当我拿到第四张卡的时候,第一张卡已经关了……
  • jeremyne​​albrown 的意思是你应该看看 Math.sin 和 Math.cos,它们非常适合用于类似“wave”的函数。尝试更改一些参数以查看会发生什么,您很可能能够编写适合您需要的任何内容
  • 在这里查看我的其他相关问题:stackoverflow.com/questions/2161123/…
【解决方案2】:

假设您的意思是体育场“波浪”效果,请尝试定义一个带有偏移量的数组,这取决于您使用的是补间引擎等还是使用其他函数。

例如 Timer 类将在这方面做得很好:

private var t:Timer = new Timer(100, 0);
    private var index:int = 0;
    t.addEventListener(TimerEvent.TIMER, ping);
    t.start();

    private function ping(ev:TimerEvent) {
        if(index < waveArray.length){
            waveArray[index].startAnimation(); //If animated by object
            startAnimation(waveArray[index]); //If animated by container
            index ++;
        }
        else {
            t.stop();
            endAnimation(); //All cards have animated
        }
    }

【讨论】:

  • 是的,我指的是体育场波浪效应。好像我不能使用“私人”这个词,我已经删除了它。为什么 if-else 不使用 for 循环?
  • @yeeen:这些动画是由TimerEvents 触发的...使用for循环会立即启动它们,而使用计时器会导致它们一个接一个地启动...
  • 这样做是每 100 毫秒(Timer() 构造函数的第一个值)运行 'ping' 函数,if/else 循环仅用于在所有项目完成后停止计时器已经通过并防止阵列上出现超出范围的错误。随着索引变量在数组中缓慢循环,您将获得每个动画开始的偏移量。基本上这是一个 for 循环,每个调用都有一个偏移量。
  • 在这里查看我的其他相关问题:stackoverflow.com/questions/2161123/…
猜你喜欢
  • 2017-11-10
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2020-08-11
  • 1970-01-01
相关资源
最近更新 更多