0

Flashプリローダーに苦労しています。画面上のテキストを現在のパーセンテージで更新したいだけです。トレースが正しいパーセンテージを出力するため、基本的には機能しますが、画面に表示されているテキストフィールドは更新されません。ただし、トレースが 100% になると、コードは画面に「100」を出力しますが、すべてが読み込まれるまでは出力されません。私は Flash IDE を持っておらず、FlashDevelop で純粋な Actionscript を使用しています。これが私のコードです:

package 
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.display.Loader;
  import flash.events.ProgressEvent;
  import flash.net.URLRequest;
  import flash.net.URLLoader;
  import flash.display.Loader; 
  import flash.text.TextField;
  import flash.text.TextFormat;
  import flash.text.TextFieldType;


  public class Main extends Sprite 
  {
    public var myLoader:Loader = new Loader();
    public var image:String = "tmp/Avengers-poster.jpg";


    private var Title:TextField;
    private var txt:String;
    private var Form:TextField;

    public function Main():void {
      textbox("This is the title","box",100,100,200,30);

      myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressStatus);
      myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderReady);

      var fileRequest:URLRequest = new URLRequest(image);
      myLoader.load(fileRequest);           
    }

    public function onProgressStatus(e:ProgressEvent):void {   
        // this is where progress will be monitored     
        var perc:int = Math.ceil((e.bytesLoaded/e.bytesTotal)*100);
        txt = perc.toString();
        Title.text = txt;
        addChild (Title);
        trace(perc); 
    }

    public function onLoaderReady(e:Event):void {     
        // the image is now loaded, so let's add it to the display tree!     
        addChild(myLoader);
    }   

    private function textbox (title_str:String,form_name:String,x:int,y:int,width:int,height:int):void {

       Title = new TextField ();
       Title.text = title_str;
       Title.selectable = false;
       Title.setTextFormat (new TextFormat ("Arial", 12, 0x777777, true));

       txt = ".";

       Title.x = x;
       Title.y = y;
       addChild (Title);
    }       

  }

}

ご協力いただきありがとうございます。

ダリル

4

1 に答える 1

0

これは機能します。各ステータスで TextField を再作成しないでください。addChild を 1 回だけ実行し、それへの参照を更新する必要があります。

package 
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFieldType;
    import flash.text.TextFormat;   

    public class Main extends Sprite 
    {
        public var myLoader:Loader = new Loader();
        public var image:String = "http://apod.nasa.gov/apod/image/0605/titan5km_huygens_big.jpg";

        private var Title:TextField;
        private var Form:TextField;

        public function Main():void {

            createTextField("This is the title","box",100,100,200,30);

            myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressStatus);
            myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderReady);

            var fileRequest:URLRequest = new URLRequest(image);
            myLoader.load(fileRequest);           
        }

        public function onProgressStatus(e:ProgressEvent):void {   
            // this is where progress will be monitored     
            var perc:int = Math.ceil((e.bytesLoaded/e.bytesTotal)*100);
            Title.text = perc.toString();
        }

        public function onLoaderReady(e:Event):void {     
            // the image is now loaded, so let's add it to the display tree!     
            addChild(myLoader);
        }   

        private function createTextField (title_str:String,form_name:String,x:int,y:int,width:int,height:int):void {

            Title = new TextField();
            Title.text = title_str;
            Title.selectable = false;
            Title.setTextFormat (new TextFormat ("Arial", 12, 0x777777, true));

            Title.text = ".";

            Title.x = x;
            Title.y = y;

            addChild (Title);
        }       

    }   
}
于 2012-08-29T08:23:11.293 に答える