Волнообразная анимация объектов в AS3

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

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


person yeeen    schedule 25.01.2010    source источник
comment
У вас есть пример того, что вы пытаетесь сделать? отражать их в волнообразной форме довольно неоднозначно.   -  person sberry    schedule 25.01.2010
comment
Я хотел открыть 1 карту, медленно закрыть ее, открыть другую карту, медленно закрыть ее... Например, когда я дошел до 4-й карты, 1-я карта уже закрыта... понятно?   -  person yeeen    schedule 26.01.2010


Ответы (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
        }
    }
person longstaff    schedule 26.01.2010
comment
Да, я имею в виду волновой эффект стадиона. Кажется, я не могу использовать слово «частный», я его удалил. Почему if-else используется не в цикле for? - person yeeen; 26.01.2010
comment
@yeeen: эти анимации запускаются TimerEvents ... использование цикла for запустит их все сразу, тогда как использование таймера заставит их запускаться один за другим ... - person back2dos; 26.01.2010
comment
то, что он делает, каждые 100 мс (первое значение конструктора Timer()), он запускает функцию «ping», цикл if/else предназначен только для остановки таймера после того, как все элементы прошли, и предотвращения выхода из ошибка диапазона в массиве. По мере того, как переменная индекса медленно проходит через массив, вы получите смещение для каждого запуска анимации. В основном это цикл for со смещением для каждого вызова. - person longstaff; 27.01.2010
comment
Ознакомьтесь с моими другими связанными qn здесь: в массиве, создающем эффект волны стадиона"> stackoverflow.com/questions/2161123/ - person yeeen; 29.01.2010

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

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;
}
person JeremyFromEarth    schedule 25.01.2010
comment
Спасибо за интересную анимацию, но это не то, что я ищу. Я хотел открыть 1 карту, медленно закрыть ее, открыть другую карту, медленно закрыть ее... например, когда я дошел до 4-й карты, 1-я карта уже закрыта... - person yeeen; 26.01.2010
comment
Jeremynealbrown говорит, что вам следует взглянуть на Math.sin и Math.cos, которые очень хорошо использовать для «волновых» функций. Попробуйте изменить некоторые параметры, чтобы увидеть, что произойдет, и вы, скорее всего, сможете написать все, что вам нужно. - person Antti; 27.01.2010
comment
Ознакомьтесь с моими другими связанными qn здесь: в массиве, создающем эффект волны стадиона"> stackoverflow.com/questions/2161123/ - person yeeen; 29.01.2010