【问题标题】:Preload Text from an External site从外部站点预加载文本
【发布时间】:2013-09-01 06:52:36
【问题描述】:
我在一个文档中多次使用此操作脚本:
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;
}
不幸的是,该文本的出现往往存在明显滞后。在调用显示这些文本文件之前,如何让闪存缓存这些文本文件? -- 有点像文本文件的预加载器。
【问题讨论】:
标签:
actionscript-3
url
loader
【解决方案1】:
这是一个基本的加载队列,它将获取一个 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 向量中获取任何存储的文本sn-ps。例如Box.text = loadedText[0]; 从urls 向量中的第一个 URL 加载文本,以此类推。
附带说明一下,将您的外部内容包含在单个 XML 或 JSON 文件中可以让生活更轻松,这两种文件都在 Flash 中得到很好的支持。这使您可以将所需的文本 sn-ps 划分为一个文件中的单独变量,从而减少所需的加载请求数量。当然,您可能无法控制您正在检索的特定内容,在这种情况下它不会适用。但如果您是内容作者,我建议您查看这些内容。