динамически увеличивать и уменьшать альфа-значение в цикле for - PullRequest
0 голосов
/ 21 марта 2012

Мне нужно динамически увеличивать и уменьшать альфа-значение в цикле for, как показано ниже

например, если цикл for равен 5 раз, а альфа, которую мне нужно изменить, равна "x", тогда

loop 1 --> x = 0.3;
loop 2 --> x = 0.5;
loop 3 --> x = 1.0;
loop 4 --> x = 0.5;
loop 5 --> x = 0.3;

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Это было немного сложнее, чем я думал, но вот функция, которую я создал:

function progEach(callback:Function, amount:int):void
{
    var rate:Number = 1 / amount;

    for(var i:int = 0; i<=amount; i++)
    {
        var val:Number = (i * rate) * 2;

        if(i > 1)
        {
            // Return decrementing value.
            callback(1 - Math.abs(1 - val));
            continue;
        }

        // Return incrementing value.
        callback(val);
    }
}

Использование:

Создание функции тестирования (она вызывается вышеуказанной функциейЯ сделал):

function test(i:Number):void
{
    trace(i.toFixed(2));
}

И затем запустите progEach() (я не мог придумать подходящего имени для него):

progEach(test, 6);

Вы должны получить этот вывод:

0.00
0.40
0.80
0.80
0.40
0.00

Измените amount на что угодно:

progEach(test, 11);

Дает:

0.00
0.18
0.36
0.55
0.73
0.91
0.91
0.73
0.55
0.36
0.18
0.00

Чтобы применить это к коллекции изображений, как вы упоминали вваши комментарии, вы можете сделать что-то вроде этого, предполагая, что у вас есть все эти изображения в массиве с именем images в моем примере:

var i:int = 0;

function alphaImages(a:Number):void
{
    images[i].alpha = a;

    i++;
}

progEach(alphaImages, images.length);
0 голосов
/ 21 марта 2012

Вы не можете (или не должны) делать это для циклов for. ActionScript не является многопоточным. Код приостановит рендеринг на экране, чтобы выполнить цикл for, пока он не закончится, а затем возобновит рендеринг.

То, что вы хотите сделать, это какое-то поведение анимации с альфа, и самый хороший способ сделать это с TweenLite , как предположил Идо. Не стоит недооценивать эту библиотеку, она невероятно хороша, и с ее помощью можно выполнять любые виды анимации.

Вы можете создать Sprite для группировки объектов слева и еще один Sprite для группировки объектов справа.

var groupLeft:Sprite = new Sprite();
groupLeft.addChild(objectLeft1);
groupLeft.addChild(objectLeft2);
addChild(groupLeft);

var groupRight:Sprite = new Sprite();
groupRight.addChild(objectRight1);
groupRight.addChild(objectRight2);
addChild(groupRight);

Затем анимируйте две группы, независимо от того, сколько объектов в каждой группе.

TweenLite.to(groupLeft,  1, {alpha:1}); // fade in, 1 second
TweenLite.to(groupRight, 1, {alpha:0}); // fade out, 1 second

И, конечно же, не забудьте скачать TweenLite, импортировать его в свой проект и импортировать в свой файл .as. Если вышеприведенное решение не применяется напрямую, существуют другие способы использования TweenLite.

Он может делать все, что вам нужно.

0 голосов
/ 21 марта 2012

Почему бы не использовать Greensock's Tweenlite ?Просто включите его и используйте его так:

TweenLite.to(object, 1, {alpha:0.5}); // turn's the object.alpha to 0.5 in 1 second

Если вы хотите иметь несколько анимаций, вы можете добавить несколько:

var animationSet:TimelineLite = new TimelineLite();
animationSet.append(new TweenLite(object, 1, {alpha:1}))
animationSet.append(new TweenLite(object, 1, {alpha:0}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...