Волнообразная анимация на объектах в AS3 - PullRequest
0 голосов
/ 25 января 2010

У меня есть разные карты, мне нужно показать их в форме волны, то есть карты открываются и закрываются в разные моменты времени последовательно и систематически, так что они образуют волну.

У меня уже есть карты в массиве. Как наиболее эффективно реализовать эту анимацию?

Ответы [ 2 ]

2 голосов
/ 26 января 2010

предполагая, что вы имеете в виду "волновой" эффект стадиона, попробуйте определить массив со смещением, это будет зависеть от того, используете ли вы твининг-движок и т. Д. Или если вы используете другую функцию.

Например, класс 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
        }
    }
2 голосов
/ 26 января 2010

Вы должны освоиться с использованием Math.sin () и Math.cos (). Изучите простые функции триггеров и запомните перевод радиан и градусов. Есть много интересных и интересных трюков, которые вы можете использовать повторно в разных контекстах, когда вы хорошо разберетесь в этих понятиях. Следующий фрагмент демонстрирует, как перемещать объект с «волнообразной формой». Это может быть не совсем то, что вы ищете, но это должно помочь вам добраться туда, куда вы пытаетесь пойти. Он написан в AS3 с использованием IDE CS4.

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