문제

내가 만들려고/를 사용 pre-로더에서 내 flex 응용 프로그램.프리로더 SWF 파일이 있는 100 개의 프레임(1 퍼센트 로더의 진행).기본적으로 나 노력하고 포함 이 SWF 파일 내 응용 프로그램에서 화면에 표시하고 변경의 프레임 번호를 표시되어 있으로 진행됩니다.

코드는 지금까지입니다(확장하는 캔버스):

[Embed("/../assets/preLoader.swf")]
private var SWFClass:Class;

private var _preLoader:MovieClip;

private var _progress:Number;

public function set progress(value:Number) : void {
    _progress = value;

    if(progress < 100) {
        _preLoader.gotoAndPlay(progress, null);
    }else {
        _preLoader.gotoAndStop(0, null);
    }
}   

[Bindable]
public function get progress() : Number {
    return _progress;
}



(Called on creationComplete event)          
private function init() : void {
    _preLoader = MovieClip(new SWFClass());

    this.addChild(_preLoader);

    _preLoader.play();
}

에 오류가 나는 점점은:

TypeError: Error #1034: Type Coercion failed: cannot convert widgets::PreLoader_SWFClass@30b3be51 to mx.core.IUIComponent.at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:3259]

도와주세요!

도움이 되었습니까?

해결책

사용 sprite 대신 캔버스로서 기본 클래스입니다.두 가지 이유가 이렇게하려면:

  1. 캔버스는 많은 종속성의(조정의 100k+의 코드 구성).당신이 기다리고 싶지 않는 모든이드 표시하기 전에 귀하의 프리로더

  2. 캔버스 UIComponent 컨테이너입니다.그것을 사용하고 싶을 때는 배치 UIComponents.귀하의 경우에,당신은 필요하지 않은 복잡한 캔버스에 레이아웃을 로직-당신이해야를 표시하립니다.그래서 사용하지 않는다.

대답을 원래 질문 SWFLoader 및 이미지는 UIComponents 는 알고를 표시하는 방법을 비트맵 무비 클립.다음과 같은 것이 가능합니다 대신:

var img:Image = new Image();
img.source = _preloader;
this.addChild(img);

다른 팁

당신이 필요가 있는 래퍼상 MovieClip 를 구현하는 IUIComponent 할 수 있게 하기 위해서 전달할 addChild().서 addChild() 문서:

참고:면서 아이를 인수하는 방법으로 지정 형식의 디스플,인자를 구현해야 합니다 IUIComponent 인터페이스를 추가로 아동의 컨테이너입니다.모든 플렉스 구성 요소를 이 인터페이스를 구현합니다.

당신이 뭔가를해야합니다 다음과 같다:

public class MovieClipUIComponent extends UIComponent {
   public function MovieClipUIComponent (mc:MovieClip) {
      super ();

      mcHeight = mc.height;
      mcWidth = mc.width;

      // add your own magic

      addChild (mc);
   }
}

경고:검증되지 않은 코드를 제공해야 당신에게 아이디어만!

이 작업 했다.

[Embed(source="assets/yourSWF.swf", mimeType="application/octet-stream")]
public var SWF:Class;

_swfLoader = new Loader();
//nothing to do onComplete or onProgress method just to debug
// Add complete event listener
_swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
// Add progress event listener
_swfLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);


// Add error event listener. Critical if you don't want run time errors if there
// are problems loading the file.
_swfLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);

// Incase of loading Flex. Very important.
_swfLoader.addEventListener("mx.managers.SystemManager.isBootstrapRoot", systemManagerHandler);
_swfLoader.addEventListener("mx.managers.SystemManager.isStageRoot", systemManagerHandler);

// Load on the loader with a new URLRequest instance passing the path to
// it's constructor.
_swfLoader.loadBytes(new SWF());

// We have to addd the loader so it creation is done.
addChild(_swfLoader);

private function systemManagerHandler(e:Event):void {
            // Prevent default stops default behaviour here and thus stops some potential
            // run time errors.         
            e.preventDefault();
}

보라에서의 프리로더 클래스고 프리로더 응용 프로그램의 속성 클래스입니다.

으로 문서를 말한다,당신은 확실히 없을 확장 코드 UIComponent(또는 이미지 또는 SWFLoader)클래스에 대한니다.

여기에 몇 가지 예의로 이동하는 방법에 대해 사용자 정의 프리로더:

http://www.pathf.com/blogs/2008/08/custom-flex-3-lightweight-preloader-with-source-code/

http://groups.adobe.com/posts/15d371c71d

http://www.webapper.net/index.cfm/2008/1/17/Flex-NotSo-Custom-Preloader

내가 찾은 사용자 정의 프리로더를 사용하여 외부 swf 코드에서 이 링크
http://askmeflash.com/article_m.php?p=article&id=7

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top