我在文档中多次使用此动作:
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;
}
不幸的是,在出现这个文本方面往往存在显着的滞后。在调用这些文本文件之前,如何让它们缓存这些文本? - 有点像文本文件的预加载器。
答案 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中都得到了很好的支持。这使您可以将所需的文本片段分成一个文件中的单独变量,从而减少所需的加载请求数。当然,您可能无法控制要检索的特定内容,在这种情况下,它将不适用。但如果您是内容作者,我建议您查看这些内容。