Flash AS3 加载最佳实践

3
我正在创建一个交互式的Flash应用程序,需要使用许多声音文件和图像。我目前是按需加载资源(包括图像和声音文件)。在我的电脑上运行时一切正常,没有延迟。但是在外部计算机上运行会出现暂停和延迟。我知道这是由于加载资源所需的时间导致的。
我想知道加载资源的最佳实践是什么。我应该在开始时预先加载所有内容(这将创建相当长的暂停)吗?还是在每次需要新资源时短暂暂停多次更好?或者有更好的解决方案(希望如此)?
我已经学习AS3编程约3个月,所以我相对较新。如果这个问题很初级,请见谅,但我确实需要解决延迟问题。
3个回答

2
这取决于应用程序的类型:
如果您希望用户无论如何都会使用您的整个应用程序(例如游戏),则应预加载资源。 如果您的应用程序更像媒体播放器或图像库,大多数用户只会查看少量资源,则应按需加载资源。
这还取决于资源的大小。 您不应让用户等待太长时间或创建过多的流量。 另一方面,进行单个预加载可能比在单个请求中加载每个小资源更容易。 也许您可以定义较大的集合以便在单个步骤中完成此操作。 您甚至可以结合两种方法:预加载一些常见资源,并在后台加载其他内容。

该应用程序是为儿童设计的测试。大部分资源都将被需要,但由于程序中的分支,有些资源可能不会被使用。大多数资源的大小在20-200 kb之间。现在我的总资源量约为12MB,但预计在应用程序完成时将达到50-70 MB。 - user922467
1
@user922467在我看来,这太多了,尤其是如果它会不断增长。我可能会尝试在用户回答当前问题时为即将到来的问题加载资源。如果下一个问题取决于当前问题的答案,那可能会有问题……要么让用户等待,要么让他加载他不需要的东西。这取决于你的决定。 - kapex
谢谢你的帮助。我会尝试预先加载一些问题。 - user922467

1

我赞同 @kapep 的观点,你应该在开始时预加载常用的资源。如果有用户可能不需要的大型资源,可以按需加载。

如果这个测试是连续的,您可以在“测试问题1”开始后立即加载“测试问题2”的材料。您可以异步加载,使应用程序仍然具有交互性(用户可以与测试问题1进行交互),同时正在加载更多的材料(测试问题2资源)。


看起来有两个重复的答案指向了同一个方向。感谢您的帮助。 - user922467

0

为了预加载资源,我强烈建议使用Greensock库。实际上,通过使用LoaderMax,您可以将内容排队进行加载,然后将已加载的内容附加到容器(movieclips、sprites等)中。

以下是加载多个资源的示例代码:

var queue:LoaderMax = new LoaderMaxVars()
                .maxConnections(1)
            .onProgress(onContentProgress)
            .onIOError(onIOErrorHandler)
                            .onComplete(onContentLoaded));

queue.append(new SWFLoader(contentTobeLoaded,new SWFLoaderVars().name(loaderName)));

....

private function onEmployeeContentLoaded(event:LoaderEvent):void {
  var loadedContent:Array = (event.target as LoaderMax).content;
  ....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接