【问题标题】:as3 self preloaded (internal) in Document Classas3 在文档类中自行预加载(内部)
【发布时间】:2012-06-05 07:51:08
【问题描述】:

我用谷歌搜索了很多,除了基于时间轴的预加载器或外部预加载器(加载外部 swfs)之外找不到任何东西。

我正在寻找预加载的 Document 类,它甚至为第一帧导出了库符号。

请指教。

我在文档类中也有私有变量,引用那些导出的剪辑。

public var menu:Menu;
public var brand:MovieClip;
public var container:MovieClip;
public var background:Background;
public var intro:Intro;
public var language:Language;

加上第一帧上由 flash 本身导出的大量剪辑,例如 Combobox,(下面的屏幕截图)

【问题讨论】:

标签: actionscript-3 flash preloader


【解决方案1】:

您只需要使用root.loaderInfobytesTotalbytesLoaded 属性即可。

当它们彼此相等时,您已经加载了 100% 的 SWF,您可以相应地管理接下来应该发生的事情。

示例:

package
{

    import flash.display.Sprite;
    import flash.events.Event;


    /**
     * Document class.
     */
    public class Document extends Sprite
    {

        // Constructor.
        public function Document()
        {
            addEventListener(Event.ENTER_FRAME, _loadStatus);
        }


        // Manage the current status of the preloader.
        private function _loadStatus(e:Event):void
        {
            if(loadPercent >= 1)
            {
                removeEventListener(Event.ENTER_FRAME, _loadStatus);

                beginApplication();
            }
        }


        // Load complete, being the application here.
        protected function beginApplication():void
        {
            trace("Loaded.");
        }


        // Returns a number representing current application load percentage.
        protected function get loadPercent():Number
        {
            return root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal;
        }

    }

}

我还必须注意,在第一帧导出所有库符号是个坏主意 - 您需要确保它们没有在第一帧导出。

奖励:将上述类作为您的实际文档类的基类,可以形成一个非常整洁的应用程序入口点(您开始编写应用程序的地方):

public class MyDocument extends Document
{

    override protected function beginApplication():void
    {
        // Application has loaded.
        // Your initialize code here.
        //
        //
    }

}

【讨论】:

  • 感谢您的回答,但问题是如果我将剪辑设置为导出到第 2 帧,我会遇到各种错误,例如我在 Document 类中有私有变量这些剪辑,编辑了我的问题以包含它们。
  • @iPhoneDeveloper 是的,所以要解决这个问题,您必须在文档加载后初始化一个包含这些引用的类,这将解决这些错误。在第一帧导出的所有内容会发生什么,预加载器(如果有的话)甚至可能在文档加载 90% 之前都不会显示,因为其他所有内容都会阻塞加载。如果所有内容都在第一帧中导出,您可能还没有预加载器。
  • 同意,但是我必须更改每个剪辑,如果我喜欢一两个也没问题,但我注意到闪存本身的许多组件将自身导出到第 1 帧,甚至将它们移动到第 2 帧会引入更多错误,附上问题截图
  • @iPhoneDeveloper 您可以shift-选择您的符号,然后右键单击->属性一次修改多个。或者,您可以转到 File->ActionScript settings,然后更改标记为“Export classes in frame [1]”的字段的值。
猜你喜欢
  • 1970-01-01
  • 2011-06-26
  • 2020-06-05
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多