1

アニメーションが終了したら、Mainクラスを削除して再追加/「再起動」したいと思います。私のアニメーションはすべてメインで行われており、メイン内の表示ツリーに追加されます。Program.asは、Mainを追加/削除することにより、これらすべてを処理します。finishNow()Main.as内で関数を実行するにはどうすればよいですか?次のエラーをスローすることを除いて、すべて正常に機能しますprogram.finishNow();

TypeError:エラー#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。

.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.は以下にあります。以前は、クラスはnullオブジェクトを指していました。

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 に答える