Flash 什么';这是一种快速、有效的方法,可以循环4幅一幅地褪色的图像?

Flash 什么';这是一种快速、有效的方法,可以循环4幅一幅地褪色的图像?,flash,actionscript-3,Flash,Actionscript 3,我正试图找出一种简单的方法,使4张(或任意数量的)图像淡入淡出,并将其循环,以便最后一张图像与第一张图像一起淡入淡出。我把一些非常可怕的东西放在一起,甚至没有把最后一张照片褪色成第一张。下面是供您嘲笑的代码 你知道我该如何改进吗 function beginTween():void { TweenMax.to(bg01, 2, { alpha:1 }); TweenMax.to(bg01, 2, { alpha:0, delay:20 }); TweenMax.to(bg02, 2, { al

我正试图找出一种简单的方法,使4张(或任意数量的)图像淡入淡出,并将其循环,以便最后一张图像与第一张图像一起淡入淡出。我把一些非常可怕的东西放在一起,甚至没有把最后一张照片褪色成第一张。下面是供您嘲笑的代码

你知道我该如何改进吗

function beginTween():void
{
TweenMax.to(bg01, 2, { alpha:1 });
TweenMax.to(bg01, 2, { alpha:0, delay:20 });

TweenMax.to(bg02, 2, { alpha:1, delay:20 });
TweenMax.to(bg02, 2, { alpha:0, delay:25 });

TweenMax.to(bg03, 2, { alpha:1, delay:25 });
TweenMax.to(bg03, 2, { alpha:0, delay:30 });

TweenMax.to(bg04, 2, { alpha:1, delay:30 });
TweenMax.to(bg04, 2, { alpha:0, delay:35 });

TweenMax.to(bg05, 2, { alpha:1, delay:35 });
TweenMax.to(bg05, 0.5, { alpha:0, delay:40, onComplete:beginTween });
}

beginTween();  

你可以用这样的循环来做

function beginTween():void {

    var bgs:Array = [bg01, bg02, bg03, bg04];
    var i:int = 0;

    for each(var bg:Sprite in bgs) {
        TweenMax.to(bg, 2, {alpha: 1, delay: i == 0 ? 0 : 15 + 5 * i});
        TweenMax.to(bg, i == 4 ? 0.5 : 2, {alpha: 0, delay: 20 + 5 * i, onComplete: i == 4 ? beginTween : null});
        i++;
    }
}

但实际上我更喜欢你的方法。它更干净,更容易理解。有时候稍微重复一下也可以。

这没有经过测试,但绝对是正确的想法

var count:int;
var currentImage:Bitmap;
var images:Array = [];
images.push(img);
images.push(img);
images.push(img);
//etc...

function transitionImages():void {
    TweenMax.to(currentImage, 2, { alpha:0 });
    currentImage = images[++count % images.length];
    TweenMax.to(currentImage, 2, { alpha:1, onComplete:transitionImages });
}

很酷,我喜欢这个。但是,当我实现它时,我一直遇到以下错误(此错误循环):TypeError:error#1009:无法访问null对象引用的属性或方法。在com.greensock::TweenLite/init()的com.greensock::TweenMax/init()的com.greensock::TweenMax/renderTime()的com.greensock.core::SimpleTimeline/renderTime()的com.greensock::TweenLite$/updateAll()中,我应该补充一点,它是有效的,但这是Flash IDE输出显示的错误。正如我所说,没有经过测试。但这可能是因为currentImage在开始时为null,在第一次调用它之前将其设置为等于第一个映像,或者添加一个if(currentImage)checkPerfect,这是有效且有意义的。谢谢你的帮助!