2011-08-20 2 views
0

지금 내가해야하는 AS2 코드에서 일하고 있어요 :임베디드 swf에서 변수 액세스? (AS2)

  • 로드 다른 AS2의 SWF.
  • 로드 된 SWF 위에 다른 MovieClip을 표시합니다.
  • 로드 된 SWF의 MovieClip 내부 변수에 액세스합니다. 여기

내 코드, 지금이다 : 나는로드 된 SWF 위의 그림을 보여주기 위해 노력하고있어

loadMovieNum("player.swf",5); 
    delay = function() { 
    var first:MovieClip = _root.attachMovie("OnTop","nf",10); 
    trace(_root.nf); 
    trace(_layer5); 
    clearInterval(delayi); 
    } 

delayi = setInterval(delay, 3000); //3 seconds to let the video load. 

("ONTOP는"나는 그것의 유형이 무비 클립 인 기호를 준 이름입니다). 그러나 비디오가 다른 모든 것 위에 표시되고 추적 출력은 다음과 같습니다.

_level0.nf 
undefined 

무엇이 잘못 되었나요? 새로운 MovieClip이로드 된 위에 표시되지 않는 이유는 무엇입니까? 그리고 그 다음으로 SWF를로드 한 후 기본 MovieClip 내부의 변수에 어떻게 액세스 할 수 있습니까?

감사합니다.

답변

0

개인적으로 MovieClipLoader로이 작업을 수행합니다. 타이머를 사용하여로드 지속 시간을 가정하면 매우 느린 연결을 가진 사용자가 실패하는 경쟁 조건이 만들어 지므로 매우 위험합니다.

이것은 MovieClipLoader 및 Delegate를 사용하여 AS3에서 addEventListener와 마찬가지로 이벤트 함수의 범위를 나머지 코드에 대해 로컬로 유지하는 간단한 예입니다. 먼저로드 할 SWF를 'child.swf'라고합니다. 하는 것입니다, 'MC1'의 식별자로 우리가 로더 코드를가집니다 부모 SWF에서

var hello:String = "Hi"; 

및 라이브러리 항목 :이 애니메이션을 포함하고 프레임 1에는 '안녕하세요'라는 문자열 변수를 정의 로드 된 SWF 위의 스테이지에 연결됩니다. 대상 SWF가로드 및 첫 번째 프레임이 첫 번째 프레임의 코드는 상위 SWF로 구할 수 있음을 의미 처리되었을 때 onLoadInit 함수를 호출하는 MovieClipLoader

//grab Delegate to mimic AS3 event handler scope 
import mx.utils.Delegate; 
//create container for the loaded SWF 
var loadedMC:MovieClip = createEmptyMovieClip("loadedMC",5); 
//create the loader (don't cast it though, or you can't directly access the events) 
var loader = new MovieClipLoader(); 
//set up a listener for the load init (called when the first frame of the loaded MC is executed) 
loader.onLoadInit = Delegate.create(this, onMovieInit); 
//start loading 
loader.loadClip("child.swf",loadedMC); 
//init handler 
function onMovieInit() 
{ 
    //create the next layer from the library 
    var firstMC:MovieClip = attachMovie("mc1","newName",10); 
    //trace var from loaded mc 
    trace(loadedMC.hello); // hi 
} 

. 리스너 객체를 공식 문서로 사용하는 대신 onLoadInit에 대한 호출을 위임하면 함수의 범위가 변경되지 않았으므로 핸들러 함수 내에서 _root을 사용하기위한 요구 사항이 제거되어야합니다.