AS3:简化'通用装载机'

时间:2009-07-09 04:09:34

标签: flash actionscript-3 class detect loader

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

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

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

3 个答案:

答案 0 :(得分:2)

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

  1. 查看网址相当简单,但可能并不总是有效...有些人提供的是来自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虽然...你应该只加载图形SWFs像那样...在任何其他情况下,使用正确的编码将其转换为String(理想情况下,文本数据在utf8中提供)...然后你可以猜测,它是否可以是XML,JSON或URL编码的变量...尝试解析(使用类XMLcom.adobe.serialization.JSONflash.net.URLVariables)...如果一切都失败了,它可能只是文本(你可以尝试验证表面上......如果你想要一些意见,请给我留言......
    2. 自己做HTTP ...打开一个套接字并加载源...你还会得到mime-types ......你可以依赖它,但它有助于...有一个HTTP implementation in AS3 ...一旦掌握了数据
  3. 手动传递类型......纯粹而简单......而且你不依赖其他任何人......
  4. Loader和URLLoader之间也存在一个重要的区别...... Loader可以在域中加载数据,只需对其内容进行沙盒处理,以便您无法查看... URLLoader只能从您的域加载,而域名明确允许这样做使用跨域策略文件...

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

    所以,是的......无论你选择什么,祝你好运......;)

    格尔茨

    back2dos

答案 1 :(得分:1)

Bulkloader会根据网址做一些猜测,或者看一下源代码并看看他们是如何做到的?

答案 2 :(得分:0)

就我个人而言,如果它是图像或xml,我会准确指定你想要加载对象的方式。由于我编写了一些队列加载器,我建议你不要只跟踪一个URL字符串,而是跟踪一组对象,如加载的URL,加载的URL,加载优先级和类型。这是一些psudo代码。

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;

//现在将其推送到您编写的将管理队列的令人敬畏的加载器类中。我会发送对象加载,对当前作用域的引用,例如,以及加载此对象时要调用的函数的名称。

MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone); 

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

这可能有所帮助。

其他明智的做法是弄清楚你想要加载什么类型的对象,例如BMP,并根据对该对象的查找使用正确的加载器。