动态地增加和减少for循环中的alpha值

时间:2012-03-21 05:54:29

标签: actionscript-3 actionscript

我需要动态增加和减少" for循环中的alpha值"如下所示

例如,如果' for循环'是5次,我需要更改的alpha是" 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 个答案:

答案 0 :(得分:1)

这比我想象的要复杂一点,但这是我创造的一个功能:

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);

答案 1 :(得分:0)

为什么不使用greensock的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}))

答案 2 :(得分:0)

你不能(或不应该)使用for循环执行此操作。 ActionScript不是多线程的。代码将暂停屏幕上的渲染以执行for循环,直到结束,然后恢复渲染。

你想要做的是使用alphas的某种补间行为,而最好的方法是使用TweenLite,就像ido建议的那样。不要低估这个库,它非常棒,可以用它完成各种补间。

您可以创建一个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。

它可以做你需要的一切。