AS3中对象上的波浪式动画

时间:2010-01-25 19:41:00

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

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

我已经在阵列中有卡片了。如何以最有效的方式实现此动画?

2 个答案:

答案 0 :(得分:2)

你应该习惯使用Math.sin()和Math.cos()。查看简单的trig函数并记住转换弧度和度数。一旦掌握了这些概念,就可以在不同的环境中重复使用许多很酷且有趣的技巧。以下代码段演示了如何使用“类似波形”移动对象。它可能不是你想要的,但它应该帮助你到达你想去的地方。它使用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;
}

答案 1 :(得分: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
        }
    }