2009-03-22 2 views
1

저는 많은 객체를 사용하는 Flex 어플리케이션에서 작업하고 있습니다. LED, 전구, 게이지는 플래시에서 생성됩니다. 객체는 내부적으로 여러 개의 작은 무비 클립으로 구성되어 있으며 내부에 자체 논리가 있습니다. 초기 요구 사항 중 하나는 런타임에 개체를로드해야하므로 SWC가 아닌 SWF로 내보냈습니다. 그러나로드 된 SWF를 복제하려고 할 때 문제가 발생했습니다. MovieClip 클래스에는 기존 MovieClip을 복제 할 수있는 복제 생성자 또는 메서드가 없습니다. 이 방법으로 우리는 많은 시간을 소모하는 hdd로부터 매번 객체를 로딩하게됩니다. ActionScript 3와 같은 언어에 이러한 메커니즘이없는 것이 가능합니까? 우리는 뭔가를 놓친 적이 있습니까? 그렇지 않다면 유일한 해결책은 Flash Component Kit을 사용하고 일부 사용자 정의 구성 요소를 만들어 컴파일시 SWC로 포함시키는 것입니다.Flex 응용 프로그램에서 외부 SWF 사용 - MovieClip 복제?

답변

0

당신은 더는 무비 클립을 복제하는 방법으로 내장이없는 점에서 정확합니다. 그러나 해결 방법이 있습니다. 내가 보는 것처럼 가장 좋은 방법은 영화 클립 클래스를 제공하는 것입니다.

실제 수업을 만들 필요는 없습니다. 복사해야하는 가장 큰 동영상 클립에 링크를 설정할 때 클래스 필드에 아무 이름이나 써주세요. 당신을위한 이름은 영화 클립을위한 LED 영화 클립, 다른 이름 등등입니다.

이제는 개체를 시작할 수있는 클래스가 있습니다. 당신이 영화 클립 중 하나를 그랩 할 때

없음 다음과 같은 방법으로 복제 할 수 있습니다

public function DuplicateDisplayObject(dO:DisplayObject):DisplayObject 
{ 
    if(dO == null) 
     return null; 
    var dOClass:Class = Object(dO).contructor; 
    return DisplayObject(new dOClass()); 
} 

이 당신이 실제로 첫번째 영화 클립 중 하나의 보류를 얻을 수있는 원인으로 가정합니다. 그리고 무비 클립의 상태를 복사하지 않는다는 사실을 기억하십시오. 또 다른 중요한 점은 영화 클립을 클래스에 연결 한 경우에만 작동한다는 것입니다. 클래스가 존재하지 않아도됩니다 (플래시는 빈 클래스를 생성합니다). 그들을합니다 ( 플렉스 컴파일러에 대한 "외부 라이브러리 경로"태그 참조)를 포함 없이 클래스에 대해 컴파일

  • 및 ( 런타임에 그들을로드 :

    다른 솔루션이 될 수 swf에서).

  • 클래스에 대해 RSL (런타임 공유 라이브러리)로 컴파일하면 sw 이 런타임에로드됩니다.

Adobe는 웹 사이트에서 쉽게 찾을 수 있어야합니다.

좀 더 이색적인 해결책은 객체의 바이트 코드를 복사하는 것입니다. displaylist에있는 항목과 제대로 작동하는지 확실하지 않습니다.

getDefinitionByName()을 사용하여 솔루션 정보 : 올바르게 기억하면 movieclips 가짜 클래스를 제공해야합니다. getQualifiedClassName은 MovieClip 클래스 만 반환하기 때문에. 그러나 나는 틀릴 수 있습니다.

0

또 다른 해결책 :

 private function duplicateImg(sourceLoaderInfo:LoaderInfo, target:Image):void 
    { 
     var ba:ByteArray = sourceLoaderInfo.bytes;   
     var dupCliploader:Loader = new Loader(); 

     dupCliploader.contentLoaderInfo.addEventListener(
      Event.COMPLETE, bytesLoaded); 

     dupCliploader.loadBytes(ba); 
    } 

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

    _img.source = mc; 
    _img.width = mc.width; 
    _img.height = mc.height+5;     
    } 
관련 문제