2

在 Flash Action 脚本 3 中,当您需要加载文本时,您使用名为 的类URLLoader,当您需要加载图像(或 .swf)时,您使用名为“Loader”的类。据我所知,加载 .bmp 与URLLoader将 .xml 加载到 Loader 一样无用 - 它不会计算。

我正在创建一个类来处理要加载的外部资产队列 - 但除了拆分目标 URL 以检查文件扩展名之外,我无法找到一个好方法来判断每个 URL 是否需要URLLoader加载器或加载器. 无论如何,可以想象 .php URL 可能返回图像或文档 - 因此无法依靠文件名来指示要使用的加载器类的正确类型。

关于如何在 URL-by-URL 的基础上可靠地检测作业的正确类的任何想法?

4

3 回答 3

2

好吧,最棘手的问题是确定目标的类型......

  1. 查看 url 相当简单,但可能并不总是有效......有些人从 phps 等提供图像......
  2. 你可以像浏览器一样做......开始加载,然后看看它是什么......现在再次,有多种可能性......
    1. 将数据加载为二进制数据......完成后,查看起始序列......是PNG(89 50 4E 47 0D 0A 1A 0A)吗?GIF ( 47 49 46 38 39 61)? JPEG ( FF E0)? SWF("FWS"(很有趣,不是吗?))?其他任何东西都应该是文本或基于文本的...在图像的情况下,将其加载到Loader...Loader::loadBytes中但要小心SWF...您应该只加载这样的图形SWF...在任何其他情况下,使用正确的编码将其转换为字符串(理想情况下,文本数据以 utf8 格式提供)...然后您可能已经猜到,它可以是 XML、JSON 还是 URL 编码的变量...尝试解析(使用 classes XML, com.adobe.serialization.JSON, flash.net.URLVariables) ...如果一切都失败了,它可能只是文本(您可以尝试从表面上验证...如果您想对此进行一些输入,请给我留言)...
    2. 自己做HTTP...打开一个套接字并加载源...您还将获得mime-types...没有什么可以依赖的,但它会有所帮助...有一个HTTP实现AS3...一旦你有数据
  3. 手动传递类型...纯粹而简单...而且您不依赖任何其他人...

Loader 和 URLLoader 之间还有一个重要的区别... Loader 可以跨域加载数据,只需将其内容沙箱化,因此您无法查看它... URLLoader 只能从您的域加载,以及明确允许使用跨域的域政策文件...

此外,加载 SWF,不仅仅是外部图形资产,而且你真的想与之交互,你不应该使用它,因为你需要控制 LoaderContext 等......

所以,是的......无论你选择哪种方式,祝你好运......;)

问候

back2dos

于 2009-07-09T11:14:59.920 回答
1

Bulkloader会根据 url 进行一些猜测,也许可以看看源代码,看看他们是如何做到的?

于 2009-07-09T06:19:24.880 回答
0

就个人而言,如果它是图像或 xml,我会准确指定您希望如何加载对象。由于我编写了一些队列加载器,我建议您不要只跟踪 URL 字符串,而是跟踪一组对象,其中包含要加载的 URL、是否已加载、加载优先级和类型。这是一些伪代码。

class QueueObject{
  var URLtoLoad:String;
  private var hasLoaded:Boolean = false;
  var isDataObject:Boolean = false;
  var queuePriority:Number = 3; // 
}

现在在您的代码中,当您想将某些内容添加到您的队列中时。

干脆去

var loadObject:QueueObject = new QueueObject();
loadObject.URLtoLoad = "http://theurl.com/somedata.xml";
loadObject. isDataObject= true;

// 现在将其推送到您编写的将管理队列的很棒的加载器类中。我会发送要加载的对象、对当前范围的引用,例如 this,以及在加载此对象时要调用的函数的名称。

MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone); 

上面的那个类现在应该有一个数组,您可以按优先级排序,以便为您提供要加载的项目、它们的类型和它们的 URL。这样你就可以

这可能有帮助,也可能没有。

其他明智的做法是找出您要加载的对象类型,例如 BMP,并根据对该对象的查找使用正确的加载程序。

于 2009-07-09T04:29:03.650 回答