1

我想在完成动画后删除并重新添加/“重新启动” Main 类。我所有的动画都发生在 Main 中,并被添加到 Main 中的显示树中。Program.as 通过添加/删除 Main 来处理所有这些。如何finishNow()在 Main.as 中运行该函数?一切正常,除了引发错误program.finishNow();

TypeError:错误#1009:无法访问空对象引用的属性或方法。

.fla 文件:

链接到 Program.as。

Program.as 文件:

package  {

    import flash.display.MovieClip;

    public class Program extends MovieClip {


        public function Program() {

            startNow();
        }

        function startNow() {
            var run:Main = new Main(this);
            addChild(run);
        }

        function finishNow() {
            removeChild(run);
            var run:Main = new Main(this);
            addChild(run);
        }

    }

}

Main.as 文件:

package {

    import flash.display.Sprite;

    public class Main extends Sprite
    {

        var stageHolder:Object;
        public var program:Program;

        public function Main(stageHolderTemp) {
            stageHolder = stageHolderTemp; 
            trace(stageHolder);

            someFunctionsThatDrawGraphics();
        }

        function callFinishFunction():void {
            // how to call finishNow() function from Program.as file here?
            program.finishNow();
        }

    }
}
4

2 回答 2

2

你应该有你的run变量类范围,而不是函数范围。

package  {
    import flash.display.MovieClip;
    public class Program extends MovieClip {
    var run:Main; // <- THIS line
        public function Program() {
            startNow();
        }
        function startNow() {
            run = new Main(this); // and no 'var' here
            addChild(run);
        }
        function finishNow() {
            removeChild(run);
            run = new Main(this); // also no 'var' here
            addChild(run);
        }
    }
}
于 2013-03-12T16:12:06.600 回答
0

TypeError: Error #1009: Cannot access a property or method of a null object reference.可以在下面找到修复程序。以前,该类指向一个空对象。

package {

    import flash.display.Sprite;

    public class Main extends Sprite
    {

        // var stageHolder:Object; <- REMOVE this line
        public var program:Program;

        public function Main(stageHolderTemp) {
            program = stageHolderTemp; // changed stageHolder to program
            trace(program); // changed stageHolder to program

            someFunctionsThatDrawGraphics();
        }

        function callFinishFunction():void {
            program.finishNow();
        }

    }
}
于 2013-03-13T14:04:15.957 回答