2009-07-09 42 views
2

在Flash动作脚本3中,当需要加载文本时,使用名为URLLoader的类,并且当您需要加载图像(或.swf)时,使用名为'装载机“。据我所知,使用URLLoader加载一个.bmp文件与将一个.xml文件加载到一个Loader中是无用的 - 它不会计算。AS3:精简'通用加载程序'

我正在创建一个类来处理要加载的外部资源队列 - 但除了拆分目标URL以检出文件扩展名之外,我找不出一个判断每个URL是否需要的好方法一个URLLoader或一个加载程序。无论如何,一个.php URL可能会返回一张图片或一个文档是可想而知的 - 因此无法依靠文件名来指定正确类型的loader类来使用。

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

回答

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::loadBytes将其加载到Loader中...尽管如此,请谨慎使用SWF ...您应该只加载图形类似的SWF ...在任何其他情况下,使用正确的编码将其转换为字符串(理想情况下,文本数据是在UTF8中提供的)...那么也许您已经可以猜测,它是否可以是XML,JSON或URL编码的变量......尝试解析(使用类XML,com.adobe.serialization.JSON,flash.net.URLVariables)...如果一切都失败了,它可能只是文本(你可以尝试验证,表面上...如果你想要一些输入,留下我的评论)...
    2. 你自己做HTTP ......打开一个socket并加载源代码......你将会得到mime-types ......没什么可以依赖的,但它有帮助......有一个HTTP implementation in AS3 ......一旦你有数据
  3. 手动传递类型...纯粹简单...你不依赖于任何人......

也有装载机和URLLoader之间的一个重要区别...... Loader可以加载数据翻过域,只是沙箱的内容,所以你不能直视它... URLLoader只能从你的域加载,而域明确允许这个使用跨域策略文件...

也,加载SWFs,不只是外部图形资产,但你真的想与,你不应该使用这个,因为你需要控制LoaderContext等...

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

格尔茨

back2dos

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; 

//现在推入你已经写好,将管理队列的真棒装载机类此。我将发送要加载的对象,对当前作用域的引用(例如this)以及在加载此对象时要调用的函数的名称。

MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone); 

上述该类现在应该有一个数组,你可以按优先级排序,让你和项目加载,什么它们的类型是他们的URL。这样你可以

这可能有帮助或没有。

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

+0

我的思路是沿着相同的路线或多或少 - 但我不知道我想给他们指定目标是否实质上是文本或二进制数据。如果这个目标网址来自另一个来源,他们无法控制它呢?我真正想要的是找出一种方法来自动检测合适的装载机类型。 – 2009-07-09 05:02:26

1

Bulkloader根据网址做了一些猜测,也许在源文件中查看一下,看看它们是如何做到的?

+1

良好的链接 - 看起来像它试图根据URL自动检测类型,但允许用户传递额外的参数来绕过此默认行为。我喜欢这个想法。对, – 2009-07-09 06:27:59

+0

是的,就是这样。在解决这个问题之前,我已经玩过一些关于自动检测的想法。猜测URL文件类型是大部分时间做的正确的事情。如果没有,让用户重写。尝试自动检测类型会为您的lib增加很多复杂性...干杯 – 2009-08-01 19:13:44