Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash actionscript 3初始化()_Flash_Actionscript 3 - Fatal编程技术网

Flash actionscript 3初始化()

Flash actionscript 3初始化(),flash,actionscript-3,Flash,Actionscript 3,我经常在AS3类的构造函数中看到init(),有时甚至是构造函数中唯一的代码。如果您可以简单地使用构造函数本身初始化一个类,那么为什么这样做会有用呢 package { import flash.display.Sprite; public class Example extends Sprite { public function Example() { init();

我经常在AS3类的构造函数中看到init(),有时甚至是构造函数中唯一的代码。如果您可以简单地使用构造函数本身初始化一个类,那么为什么这样做会有用呢

package 
{

    import flash.display.Sprite;

    public class Example extends Sprite
    {

        public function Example()
        {
            init();                 
        }

        public function init ( ):void
        {

         //initialize here

        }

    }

}

在ActionScript3中,构造函数代码总是被解释而不是编译。我相信将代码移动到init()函数中可以编译和优化它


我这样做的原因是,我可以在不创建新实例的情况下重新初始化类。init()方法基本上是一个“重置”按钮,如果编码正确,它允许您将类返回到初始状态,同时,例如,允许任何已设置的变量保持设置


当然,这取决于您的编码方式。

另一个原因可能是您需要对stage或父容器的引用,并且懒得设置添加到stage的侦听器。然后,您应该首先实例化该类,将其添加到容器中,然后在它出现在显示列表上后调用
init()

新加入AS3的程序员经常在引用阶段时遇到问题(众所周知的“它不存在”情况)

通过做…:

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

private function init( event : Event ) : void
{
    removeEventListener( Event.ADDED_TO_STAGE, init );
    // Reference stage.stageWidth;
    // Call init after some sort of load completion initialized in the constructor
}
。。。它很容易修好


或者有时在构造函数中初始化XML加载程序,然后在加载完成时调用initialize函数。

实际上,如果有任何重要代码,请将其放入构造函数调用的函数中。