2012-07-13 5 views
2

현재 AS3에서 약간의 문제가 있습니다. 내가 성취하고자하는 것은 for 루프에서 이미지를 희미하게 만드는 것입니다. 문제는 루프가 setInterval 함수가 완료되기를 기다리지 않고 있다는 것입니다.for 루프에서 setInterval 사용

for(var i in imageClips){ 
    setInterval(function(){ 
     fade(imageClips[i]); 
    }, 6000);   
} 

일단 setInterval 함수가 호출되면 동작이 명확 해지고 루프가 계속됩니다. 내 질문은 지금, 루프가 setInterval 함수에서 일어나는 일들이 완료 될 때까지 기다릴 수있는 방법이 있는가? 사전에

감사합니다,

답변

1

setInterval 토마스 루프의 실행을 지연하지 않습니다. 이 작업을 수행 할 수 있습니다

function fadeImages(imageClips) { 
    // Create a clone 
    var imageStack:Array = imageClips.concat(); 

    // Create the callback that will fade all images 
    var doFade:Function = function() { 
    if (imageStack.length > 0) { 
     fade(imageStack.shift()); 
     setInterval(doFade, 6000); 
    } 
    } 

    // Start fading images 
    doFade(); 
} 

// Fade specified images 
fadeImages(imageClips); 

을 그냥 다시, 다시 기능을 페이드를 수행합니다.

편집 : 기능으로 스 니펫을 감 쌉니다.

+0

'setInterval'대신 'Timer'를 사용하는 것이 더 좋습니다. – joncys

+0

대단히 감사합니다! 그것은 저를 위해 완벽하게 잘 작동했습니다. – thpl

+0

이 솔루션은 잘 작동하지만 무제한으로 페이딩을 반복하는 방법을 찾을 수는 없습니다. 내가 이동 요소와 배열을 밀어하려고했지만이 작동하지 않습니다. 한 번 반복해도 문제가 없지만 이미지가 너무 빨리 흐려지기 시작합니다. 이걸 다시 한번 도와 줄 수 있니? 고마워요 :) – thpl

1

트윈에 Greensock 'TweenMax과 같은 라이브러리를 사용하면 훨씬 쉽게 생활 할 수 있습니다. Flash의 프로그래밍 방식 애니메이션의 거의 표준이며 트윈에서 지연을 설정하는 기능을 포함하여 엄청난 수의 기능을 제공합니다. TweenMax를 사용

, 당신의 코드는 다음과 같을 것이다 : 당신은 대신 종료 애니메이션 기다리는 이벤트를 사용할 수

var delay:int = 6; // delay between fades in seconds 
var duration:int = 1; // duration of fade in seconds 

for (var i in imageClips) 
{ 
    TweenMax.to(imageClips[i], duration, { alpha: 0, delay: i * delay }); 
} 
0

.

dispatchEvent(new Event(Event.COMPLETE)); 

그런 다음 각 애니메이션에 리스너를 추가 :

var index:int = -1; 

function fadeNext(event:Event = null):void { 
    index += 1; 
    if (index < imageClips.length) fade(imageClips[index]); 
} 

for (var i in imageClips) { 
    imageClips[i].addEventListener(Event.COMPLETE, fadeNext, false, 0, true); 
} 

fadeNext(); 

이 방법은 시간을 변경할 수 있습니다 (A 무비 클립의 마지막 프레임에 예를 들어) 각 애니메이션의 끝에서 완벽한 이벤트를 전달 타임 아웃을 동기화 할 필요없이 애니메이션을 재생할 수 있습니다.