2011-02-18 4 views
1

레이어의 레이어, 일부 기능 및 일부 키 프레임 레이블이 포함 된 SWF의 기본 타임 라인에 플래시 애니메이션이 만들어졌습니다. 예를 들어, 나는 화면을 가로 질러 오는 별의 무비 클립을 가지고 있고 메인 타임 라인의 dispatchEvent를 트리거하여 프레임 레이블 "next"로 이동합니다.AS3 로더가 동일한 swf를 반복해서 계속로드합니다.

Stars.addEventListener("fadeInTitle",_fadeInTitle); 

function _fadeInTitle(e:Event):void { 
    Title.gotoAndPlay("fadeIn"); 
    Stars.removeEventListener("fadeInTitle",_fadeInTitle); 
} 

stop(); 

그 SWF 혼자 완벽하게 작동한다 : 여기

은 기본 타임 라인에 사용되는 액션 스크립트의 샘플입니다. 이 SWF를 다른 SWF로로드하려고하면 문제가 발생합니다. 로더가 SWF를 반복해서 다시로드하고 오버랩하여로드 된 SWF의 기본 타임 라인에있는 액션 스크립트가 무시되면 타임 라인이 계속 재생됩니다. 다음은 SWF를로드하는 데 사용하는 코드입니다.

import flash.net.URLRequest; 
import flash.display.Loader; 
import flash.events.Event; 
import flash.events.ProgressEvent; 

function startLoad(){ 
    var mLoader:Loader = new Loader(); 
    var mRequest:URLRequest = new URLRequest("Fly.swf"); 
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    mLoader.load(mRequest); 
} 

function onCompleteHandler(loadEvent:Event){ 
    addChild(loadEvent.target.content); 
} 

function onProgressHandler(mProgress:ProgressEvent){ 
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal; 
} 

startLoad(); 

거기에는 특별한 것이 없습니다. 그냥 간단한 로더.

하나의 메인 무비 클립에 전체 애니메이션을 넣고 기본 타임 라인 (하나의 키 프레임, 하나의 레이어, 액션 스크립트 없음)에 무비 클립을 놓은 다음로드하십시오. 그렇게하면 잘 작동하지만 해결책보다는 패치와 같은 느낌이 듭니다. 난 정말 왜 당신이 여러 레이어, keyframes 및 actionscript 메인 타임 라인을 사용하여 외부 SWF를로드하려고 할 때 괴롭 히고 싶습니다.

도움/의견을 보내 주시면 대단히 감사하겠습니다.
읽어 주셔서 감사합니다.

m

+0

startLoad()에 중단 점을 넣으려고 한 번만 호출 했습니까? – Kai

답변

0

먼저 함수에서 로더 인스턴스화를 가져오고 필요하지 않습니다. 둘째, onComplete 함수에서 리스너를 삭제합니다. 셋째,이 로더 코드가 로더 셸의 타임 라인에있는 경우 프레임이 두 개 이상 있는지 확인하거나 로더 코드가 포함 된 프레임에 멈춤을 배치하십시오. 또는 Document 클래스를 사용하여 타임 라인에 배치하는 대신 로더 코드를 포함 할 수 있습니다. 내 생각 엔 startLoad()를 다시 호출하는 것입니다. 또한 플래시 디버그 플레이어가 설치되어 있는지 확인하여 브라우저에서이 오류를보고 할 때 적절한 오류보고가 표시되도록하십시오.

var mLoader:Loader = new Loader(); 
var mRequest:URLRequest = new URLRequest("Fly.swf"); 
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
mLoader.load(mRequest); 


function onCompleteHandler(loadEvent:Event) 
{ 
    mLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler); 
    mLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    addChild(loadEvent.target.content); 
} 

function onProgressHandler(mProgress:ProgressEvent) 
{ 
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal; 
} 
+0

답해 주셔서 감사합니다. 귀하의 요점은 정확하고 로더를 수정했지만 문제가 아닙니다. 놀랍게도 해결책을 찾았습니다. 로드 된 fla 파일에 대한 테스트를하고 싶었 기 때문에 다른 이름으로 저장 한 다음 swf를 다시 내로드하고 내 swf를 새 로더에 호출했습니다. 코드 나 다른 것에 전혀 변화가 없었고 정상적으로 작동했습니다. 나는 오래된 fla 파일이나 임의의 메모리 버그에서 어떤 종류의 손상이 의심된다. –

+0

그게 이상하지만 놀라움은 아닙니다. 대부분의 경우 플래시가 작동하지만 때로는 꽤 이해하기 어려울 수 있습니다. 확인 표시를 주셔서 감사합니다. 감사합니다. :) – Ribs

관련 문제