2012-01-06 11 views
0

FlashDevelopで提供されているプリローダーを使用したいと思っていますが、それはできるだけ反応しません。プリロード付きAs3プロジェクト

ファイルがダウンロードされていない場合、Myローダーから100%が通知されます。

コードをトレース()パーセント仲介を含むが表示されますが、

あなたは私を助けてもらえないのですか?

Mains.as

package 
{ 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLRequest; 

    [Frame(factoryClass="Preloader")] 
    public class Main extends Sprite 
    { 
     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      // entry point 
      var imgRequest:URLRequest   = new URLRequest("http://next-web.be/actionscript/0.jpg"); 
      var img:Loader = new Loader(); 
       img.load(imgRequest); 
      addChild(img); 
     } 
    } 
} 

Preloader.as

package 
{ 
    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.events.IOErrorEvent; 
    import flash.events.ProgressEvent; 
    import flash.utils.getDefinitionByName; 

    import flash.display.Sprite; 

    public class Preloader extends MovieClip 
    { 
     private var bar:Sprite; 

     public function Preloader() 
     { 
      if (stage) { 
       stage.scaleMode = StageScaleMode.NO_SCALE; 
       stage.align = StageAlign.TOP_LEFT; 
      } 
      addEventListener(Event.ENTER_FRAME, checkFrame); 
      loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); 
      loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); 

      // TODO show loader 
      bar = new Sprite(); 
      bar.graphics.lineStyle(1, 0x4444ff, 1, true); 
      bar.graphics.drawRect(0, 0, 100, 6); 
      bar.x = stage.stageWidth/2 - bar.width/2; 
      bar.y = stage.stageHeight/2 - bar.height/2; 
      addChild(bar); 
     } 

     private function ioError(e:IOErrorEvent):void 
     { 
      trace(e.text); 
     } 

     private function progress(e:ProgressEvent):void 
     { 
      // TODO update loader 
      bar.graphics.lineStyle(0, 0, 0); 
      bar.graphics.beginFill(0x8888ff); 
      bar.graphics.drawRect(1, 1, (e.bytesLoaded/e.bytesTotal) * 98 , 4); 
      bar.graphics.endFill(); 
      trace("loading:" + (e.bytesLoaded/e.bytesTotal) * 100); 
     } 

     private function checkFrame(e:Event):void 
     { 
      if (currentFrame == totalFrames) 
      { 
       stop(); 
       loadingFinished(); 
      } 
     } 

     private function loadingFinished():void 
     { 
      removeEventListener(Event.ENTER_FRAME, checkFrame); 
      loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress); 
      loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError); 

      // TODO hide loader 
      removeChild(bar); 
      bar = null; 

      startup(); 
      //stop(); 
     } 

     private function startup():void 
     { 
      var mainClass:Class = getDefinitionByName("Main") as Class; 
      addChild(new mainClass() as DisplayObject); 
     } 
    } 
} 
+0

英語とフランス語の両方で質問をしないでください。また、質問にsaluationsやsigを使用しないでください。ありがとう。 – Kev

答えて

2

あなたはLoaderあなたが(あなたのケースimg.contentLoaderInfoに)データをダウンロードするために使用するのcontentLoaderInfoプロパティにリスナーを登録する必要があります。あなたのコードで

は、あなたが( MovieCLipから継承)あなた Preloaderクラスのフィールドである loaderInfo、上 progressを登録し、 Preloaderクラスを含むSWFのロードにあなたの進捗状況を与えるだろう。

public class Preloader extends MovieClip 
{ 
    public function Preloader() 
    { 
     // This is wrong. 
     loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); 
     // Function `progress` will show the progress of loading your SWF file, 
     // *not* the JPEG you're loading in class Main. 
    } 
} 

あなたは(あなたのケースimg.contentLoaderInfoに)データをダウンロードするために使用LoadercontentLoaderInfoプロパティにリスナーを登録する必要があります。

img.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); 

もちろん、それはJPEGファイルをロードするのみ進行状況が表示されます。 Loaderオブジェクト(またはcontentLoaderLinfo)を何とかPreloaderに渡すか、Mainクラスにイベントハンドラを含める必要があります。

+0

お返事ありがとうございました。 あなたは何を意味するのかよく分かりませんが、私の英語理解はもっと良いかもしれません。 私が理解しているとおり、私は単純に 'img.contentLoaderInfo;'をファイルmain.asに追加しますが、私はそれを適用したかどうかはわかりません。 ここで私は何をしました: プライベート関数init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE、init); //エントリポイント var imgRequest:URLRequest = new URLRequest( "http:// ..."); var img:Loader = new Loader(); img.contentLoaderInfo; img.load(imgRequest); addChild(img); } – Goupil

+0

私は答えを編集しました。うまくいけば今理解するのが簡単です。 – Staven

0

検索を続けると、私は間違いを認識しました。

これまでは「ローダー」を使用していましたが、この機能には自分の写真がswfファイルに含まれていません。だから、ライブラリswcを使って、完全なswfを生成することができます。

関連する問題