从外部站点预加载文本

时间:2013-09-01 06:52:37

标签: actionscript-3 url loader

我在文档中多次使用此动作:

var loader1:URLLoader = new URLLoader(new URLRequest("http:url.com/example.txt"));
loader1.addEventListener(Event.COMPLETE, completeHandler);

function completeHandler(event:Event):void {
var loadedText1:URLLoader = URLLoader(event.target);
Box.text = loadedText1.data;
}

不幸的是,在出现这个文本方面往往存在显着的滞后。在调用这些文本文件之前,如何让它们缓存这些文本? - 有点像文本文件的预加载器。

1 个答案:

答案 0 :(得分:0)

这是一个基本的加载队列,它将采用URL字符串的向量,然后下载然后按顺序存储它们中的文本,然后在完成所有操作后通知您。在此之后,您可以随时访问存储的文本。

import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;

var urls:Vector.<String> = new <String>["ex1.txt", "ex2.txt", "ex3.txt"]; //Add all your URLs here
var loadedText:Vector.<String> = new <String>[]; //Your text will be stored here
var queuePos:int = 0;
var textLoader:URLLoader = new URLLoader();
textLoader.addEventListener(Event.COMPLETE, text_load);
this.addEventListener("TEXT_LOADED", text_display);

text_load(); //This is called to start the loading process

function text_load(event:Event=null):void {
    if (queuePos > 0) loadedText.push(textLoader.data); //Store the last received text

    if (queuePos >= urls.length) { //Stop the queue if all complete
        textLoader.removeEventListener(Event.COMPLETE, text_load);
        dispatchEvent(new Event("TEXT_LOADED"));
        return;
    }

    textLoader.load(new URLRequest(urls[queuePos])); //Load the next URL
    queuePos++;
}

function text_display(event:Event):void { //Called once all text has been loaded
    Box.text = loadedText[0]; //Adds text from the 1st URL to the Box TextField
    Box2.text = loadedText[1]; //Adds text from the 2nd URL, etc.
}

因此,这允许您首先一次完成所有外部加载。在您让它运行一次之后,您可以随时从loadedText向量中获取任何存储的文本片段。例如Box.text = loadedText[0];urls向量中的第一个网址加载文字,依此类推。

作为旁注,它可以让您的外部内容更容易包含在单个 XML JSON 文件中,这两个文件在Flash中都得到了很好的支持。这使您可以将所需的文本片段分成一个文件中的单独变量,从而减少所需的加载请求数。当然,您可能无法控制要检索的特定内容,在这种情况下,它将不适用。但如果您是内容作者,我建议您查看这些内容。