0

我在文档中多次使用此操作脚本:

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;
}

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

4

1 回答 1

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];,从向量中的第一个 URL 加载文本urls,依此类推。

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

于 2013-09-01T16:20:54.503 回答