【问题标题】:as3 preloader stop loaded swf from caching?as3 预加载器停止从缓存加载 swf?
【发布时间】:2013-06-03 21:01:59
【问题描述】:

很抱歉,如果这已在其他地方得到回答,但我找不到任何匹配的内容。

我有两个 swf;一个预加载器(我们称之为 A)和一些内容(B)。 A 加载 B 并将其添加为子项。一切都运行良好(你甚至可以看到它here)。

我只有一个小问题。通常,当使用 URLLoader 类将图像加载到 flash 中时,我将+ "?" + new Date().getTime() 添加到 URLRequest 以强制 flash 加载目标的最新版本,换句话说,使用缓存版本停止它。现在,当我尝试对将 B 添加到 A 的加载程序执行此操作时,它找不到 URL (#2035 URL not found)。所以我的问题是:我正在尝试做的事情是否可行,或者我应该采取另一种方法来阻止 B 缓存?

这是预加载器代码:

package 
{
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.events.ProgressEvent;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.ErrorEvent;
    import flash.net.URLLoader;
    import flash.text.TextField;

    public class claude_loader extends MovieClip
    {
        public var main_movie:Loader = new Loader();
        public var rss_loader:URLLoader;
        private var perc_text:TextField = new TextField();
        public function claude_loader()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            with (perc_text)
            {
                x = this.stage.stageWidth / 2;
                y = this.stage.stageHeight / 2;
            }
            addChild(perc_text);
            main_movie.load(new URLRequest("claudia_summers.swf"+ "?" + new Date().getTime()));
            main_movie.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, load_progress);
            main_movie.contentLoaderInfo.addEventListener(Event.COMPLETE,on_complete);
        }
        public function load_progress(e:ProgressEvent):void
        {
            var perc:Number = Math.round((e.bytesLoaded/e.bytesTotal)*100);
            perc_text.text = "Loading " + perc + "%";
            if (e.bytesLoaded == e.bytesTotal)
            {
                perc_text.text = "Loading done";
            }
        }
        public function on_complete(e:Event):void
        {
            rss_loader = new URLLoader(new URLRequest("http://news.sulsc.org/feed"));
            rss_loader.addEventListener(Event.COMPLETE,rss_complete);
            perc_text.text = "Loading RSS";
        }
        public function rss_complete(e:Event):void
        {
            MovieClip(main_movie.content).rss_xml = XML(e.target.data);
            addChild(main_movie);
        }

    }
}

【问题讨论】:

  • 这是正常的做法。尝试用括号 () 包裹 new Date().getTime()
  • @Cherniv 这会产生同样的错误
  • trace("claudia_summers.swf"+ "?" + new Date().getTime()) 产生什么?
  • @itcouldevenbeaboat 它看起来对我来说是正确的。追踪claudia_summers.swf?1370625007600
  • 我明白你为什么要花时间在那里。我以前做过,完全一样。这可能是一个很长的镜头,但试试这个"claudia_summers.swf?" + String(new Date().getTime())

标签: actionscript-3 caching flash preloader


【解决方案1】:

不确定如何/为什么,但在 new Date().getTime() 周围添加 String() 并给 main_movie 一个 IOErrorEvent 侦听器可以解决问题。我想我在某个地方有一个错误,因为如果没有这些添加,这肯定可以工作,不是吗?无论如何感谢您的所有帮助!

工作代码:

package 
{
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.events.ProgressEvent;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.ErrorEvent;
    import flash.net.URLLoader;
    import flash.text.TextField;
    import flash.events.IOErrorEvent;

    public class claude_loader extends MovieClip
    {
        public var main_movie:Loader = new Loader();
        public var rss_loader:URLLoader;
        private var perc_text:TextField = new TextField();
        public function claude_loader()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            with (perc_text)
            {
                x = this.stage.stageWidth / 2;
                y = this.stage.stageHeight / 2;
                textColor = 0xFFFFFF;
            }
            addChild(perc_text);
            main_movie.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,catch_error);
            main_movie.load(new URLRequest("claudia_summers.swf" + "?" + String(new Date().getTime())));
            function catch_error(e:IOErrorEvent):void
            {
            main_movie.load(new URLRequest("claudia_summers.swf"));
            perc_text.text = "Failed non-cache load"
            }
            main_movie.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, load_progress);
            main_movie.contentLoaderInfo.addEventListener(Event.COMPLETE,on_complete);
        }
        public function load_progress(e:ProgressEvent):void
        {
            var perc:Number = Math.round((e.bytesLoaded/e.bytesTotal)*100);
            perc_text.text = "Loading " + perc + "%";
            if (e.bytesLoaded == e.bytesTotal)
            {
                perc_text.text = "Loading done";
            }
        }
        public function on_complete(e:Event):void
        {
            rss_loader = new URLLoader(new URLRequest("http://news.sulsc.org/feed"));
            rss_loader.addEventListener(Event.COMPLETE,rss_complete);
            perc_text.text = "Loading RSS";
        }
        public function rss_complete(e:Event):void
        {
            MovieClip(main_movie.content).rss_xml = XML(e.target.data);
            addChild(main_movie);
        }

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多