闪光灯的主要功能?

时间:2010-02-23 10:39:03

标签: flash actionscript-3

我正在尝试在主菜单中没有任何内容的情况下启动as3.0项目,我希望我的默认actionscript类能够启动它。就像C中的main一样,AS3.0中有一个类似于main的函数吗?

2 个答案:

答案 0 :(得分:3)

Document类最接近您想要的。 Document class info。我倾向于将文档类保持在最低限度。

package 
{   
    import flash.display.MovieClip; 
    import flash.events.Event;  



    public class Document extends MovieClip
    {

        public var _main:Main; 


        public function Document()
        {
            addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
        }

        //all initialization goes in here!
        private function init(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            initMain();     
        }

        private function initMain():void
        {
            _main = new Main();
        }


    }
}

请注意,调用另一个Main类只是个人偏好。如果您尝试在舞台上引用项目,事件监听器也非常重要。

答案 1 :(得分:2)

我对上面的答案做了一些修改,可能会有用。

只有当SWF可能作为模块加载到另一个应用程序中时,侦听器才能在舞台上引用事物。如果保证此文档类是根文档类,则添加事件基本上是没有意义的。我已经修改了上面的答案,如果它是根SWF,它采取更快的路线,而没有制动模块化的可能性。

我建议调查RobotLegs之类的框架来组织你的代码。进入更具交互性的场景的大多数人认为他们不需要他们开始,并最终意识到他们存在的原因非常充分 - 即依赖性在这一系列工作中往往会变得混乱。如果您选择RobotLegs,那么您的“Main”类将是框架Context。

无论如何,为了有用,您的Main类需要访问显示列表,因此您需要传入对Document类的引用。尽管如此,将它传递给DisplayObjecContainer,以避免依赖于Main中的Document。

你也不需要扩展MovieClip,因为这里没有时间线; Sprite也可以提供服务,而且课程将更轻松。暴露主变量也没有充分的理由 - 如果您要模块化地使用SWF并在文档类中公开API,那么您不希望公开Main类,您希望公开接口。 (不幸的是,您无法将Document作为模块化SWF进行有用的接口加载 - 或者至少对Flash Player 9无法加载 - 因为存在与此过程相关的错误:blog post on problems interfacing a SWF

通过这些修改,上面的答案变为:

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

    public class Document extends Sprite
    {
        private var main:Main; 

        public function Document()
        {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true);
        }

        private function onAddedToStage(event:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
            init();     
        }

        private function init():void
        {
            main = new Main(this);
        }
    }
}

但是你的主类不会知道Document类型,所以:

package 
{   
    import flash.display.DisplayObjectContainer;

    public class Main
    {
        private var viewComponent:DisplayObjectContainer;

        public function Main(viewComponent:DisplayObjectContainer)
        {
            this.viewComponent = viewComponent;
            ...
        }
    }
}