我需要动态增加和减少" 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;
答案 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。
它可以做你需要的一切。