2012-02-10 2 views
1

나는 SWF 애니메이션을로드하고 동시에 여러 장소에 표시하기를 원하지만 여기에서 볼 수 있듯이 내가 그렇게하는 방법을 알아낼 수있는 유일한 방법은, 그것을 내가 그것을 표시 할 때마다로드하는 것입니다 해요 :Actionscript에서 로더의 사본이나 캐시 된 버전을 만드는 방법이 있습니까?

private function playSounds():void { 
    for (var i:Number = 0; i < 14; i++) 
    { 
     for (var a:Number = 0; a < 16; a++) 
     {    
      if (boxes[i][a].x == linePos && boxes[i][a].selected == true && played[i][a] == false) 
      {     
       played[i][a] = true; 
       MovieClip(); 
       var swf:URLRequest = new URLRequest("../assets/glow2.swf") 
       var glow:Loader = new Loader() 
       glow.load(swf) 
       glow.x = boxes[i][a].x - 25*0.7; 
       glow.y = boxes[i][a].y - 27*0.7; 
       glow.scaleX = 0.7; 
       glow.scaleY = 0.7; 
       this.addChild(glow); 
       glows.push(glow) 
       glowTime.push(0) 
       var sc:SoundChannel = new SoundChannel(); 
       sc = (sounds[i] as Sound).play(); 
      } 
     } 
    } 
} 

한 번에 5 번 이상 표시 될 때 매우 느려서 한 번만로드하고 여러 곳에서 사용해야하는 방법이 있는지 궁금합니다.

답변

1

Loadercontent 속성이 있습니다. 따라서 한 번로드하고 내용을 여러 번 사용하십시오.

편집 : 당신은 로딩이 완료되면, 알고 리스너를 추가 할 수 있습니다 당신은로드 된 내용을 사용하기 전에 :

addEventListener(Event.COMPLETE, completeHandler); 

EDIT2 :

var mc1:MovieClip = new MovieClip(); 
var mc2:MovieClip = new MovieClip(); 

var my_Loader:Loader = new Loader(); 
mc1.addChild(my_Loader); 
mc2.addChild(my_Loader); 

(하지만 시도하지 않은) .

+0

콘텐츠를 사용해 보았지만 여전히 로더에 대한 참조로 작동하므로 새 위치를 설정하면 이전 위치의 swf가 사라집니다. – superadamwo

+0

** 아이를 여러 번 추가 **해야 할 수도 있습니다. 이것에 대한 답을 편집했습니다. – vulkanino

+0

두 개체에 동일한 개체를 자식으로 추가하면 원래 부모에서 제거되어 새 개체에 배치됩니다. 둘 다의 아이 일 수는 없습니다. – superadamwo

0

한 빠른 해결 방법은 loadBytes() 방법을 통해 그에로드 된 바이트를 두 번째 로더를 만들고 전달하는 것입니다 : 이것은 대부분의 경우에 작동합니다

var l:Loader = new Loader(); 
l.contentLoaderInfo.addEventListener(Event.COMPLETE,ready); 
l.load(new URLRequest("../assets/glow2.swf")); 

function ready(event:Event):void{ 
    var mc:MovieClip = event.currentTarget.content as MovieClip; 

    var clone:Loader = new Loader(); 
    clone.loadBytes(event.currentTarget.bytes); 

    addChild(mc); 
    addChild(clone); 

    clone.x = 100; 
} 

. 경우에 따라이 같은 간단한 멀리 얻을 수 있어야합니다 :

var clone:MovieClip = MovieClip(new mc.constructor()); 

그리고 제 3의 옵션도있다 : 당신이 하나 이상을 저장할 수 있습니다 의미 당신의 moviclip를, '블리 팅'(얼마나 많은 따라 메모리에있는 BitmapData 객체의 캐시 할 필요가있는 MoveClip 프레임을 가져오고 (동시에 여러 위치에서) 소스 동영상 클립의 draw()에서 가져옵니다.

loadBytes 접근 방식은 질문에서 알 수있는 것과 같이 Loader의 복사본을 만들어로드 된 바이트를 다시 사용하지만 새 콘텐츠를 초기화하므로 메모리를 사용합니다. 이것이 필요한 것이 아니라면 BitmapData를 사용하여 MovieClip을 캐싱하는 것이 가장 좋습니다.

+0

그래,이 작업이있어하지만 실제로 성능을 향상시킬 수 있는지 말할 수 없습니다. 그것은 여전히 ​​모든 바이트를로드해야하며, 다른 장소에서 가져옵니다. – superadamwo

+0

제목을 사용하면로드 된 내용을 다시 사용하기를 원하지만 MovieClip을 메모리에 픽셀로 캐시하려는 것처럼 들립니다. –

관련 문제