2011-11-24 94 views
3

我正在创建一个交互式Flash应用程序,我需要使用许多声音文件和图像。我正在加载资源(包括图像和声音文件),因为我需要它们。当我在计算机上运行它时,一切正常,我看不到任何延迟。在非现场计算机上运行会显示暂停和延迟。我知道这是由于加载资源所需的时间。Flash AS3加载最佳做法

我想知道加载资源的最佳做法是什么。我是否应该在开始时预加载所有内容(这会造成相当大的停顿)?当需要新资源时,多次进行短暂停顿会更好吗?还是有更好的解决方案(我希望是这样)?

我已经在AS3编程了大约3个月,所以我比较新。我很抱歉,如果这个问题真的是小白,但我确实需要弄清楚如何处理延迟。

回答

1

我同意@kapep应该在开始时预先加载常用资源。如果用户可能不需要大量资源,则可以按需加载这些资源。

如果此测试是连续的,您可以在“测试问题1”开始后立即加载“测试问题2”材料。您可以异步加载,以便在加载更多素材(测试问题2资源)的同时,应用程序仍然是交互式的(用户可以与测试问题1交互)。

+0

它看起来像两个重复的答案指着我在同一个方向。谢谢您的帮助。 – user922467

2

这取决于它是什么样的应用程序:
如果您希望用户通过整个应用程序(例如游戏),您应该预先加载资源。如果您的应用程序更像是媒体播放器或图像库,大多数用户只会看到少量资源,则应按需加载资源。

这也取决于资源的规模。你不应该让用户等待很长时间或创造很多流量。另一方面,执行单个预加载比加载单个请求中的每个微小资源可能更容易。也许你可以在一个步骤中定义更大的集合以避免这种情况。你甚至可以结合使用这两种方法:预先加载一些常用资源,并在后台加载一些其他的东西。

+0

该应用程序是一个测试的儿童。大多数资源都是需要的,但有些可能因为程序中的分支而不能使用。大部分资源是20 - 200 kb。目前我的总资源约为12MB,但预计完成申请后将达到50-70 MB。 – user922467

+1

@ user922467这对于预加载imho非常有用,特别是如果它会增长的话。当用户回答当前问题时,我可能会尝试加载下一个问题的资源。如果下一个问题取决于当前问题的答案,可能会成为问题......要么让用户等待,要么让他加载他不需要的东西。这是给你决定的。 – Kapep

+0

感谢您的帮助。我会尽量预先提出一些问题。 – user922467

0

对于预加载资源,我强烈建议使用Greensock库。实际上通过使用LoaderMax你可以排队要加载的内容,然后加载的内容附加到所述容器(影片剪辑,子画面等)

这里是用于装载多个资源的样本代码:

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