0

関数の開始から送信された変数に基づいて、クラスのインスタンスを作成しようとしています。

このクラスはdisplayObjectではなく、Flashライブラリにもありません。これは、以下が機能しないことを意味しているようです。

private function BasicControl(_stage:int):void {
        var s1:tut_stage = getDefinitionByName("stage"+_stage) as tut_stage;
        trace(s1);
        s1.Begin();
    }

これにより、次のようになります。

ReferenceError: Error #1065: Variable stage1 is not defined.
at global/flash.utils::getDefinitionByName()
at kazo::Main/BasicControl()[B:\Users\Kevin SSD\client\temp_tutorial\preview_src\kazo\Main.as:76]
at kazo::Main/SWFLoadComplete()[B:\Users\Kevin SSD\client\temp_tutorial\preview_src\kazo\Main.as:113]

ただし、次のように記述されている場合:

var s1:tut_stage = new stage1;

これは正常に機能します。

クラスがライブラリにない場合、クラスを動的に呼び出すにはどうすればよいですか?私の努力のすべてが結果を返さないようです。これを機能させる唯一の方法は、恐ろしい回避策を使用することです。

private function BasicControl(_stage:int):void {
        var s1:tut_stage;

        switch(_stage) {
            case 1:
                s1 = new stage1;
                break;

            case 2:
                s2 = new stage2;
                break;

        }
    }

ここで何かが足りないに違いありません-この場合、stage1をどのように呼び出す必要がありますか?

4

1 に答える 1

1

このgetDefinitionByName関数はクラス参照を返します。代わりにこれを試してください:

var Clazz:Class = getDefinitionByName("stage" + _stage) as Class;
var s1:tut_stage = new Clazz() as tut_stage;

さらに、コンパイル時にクラスが SWF に含まれていることを確認する必要があります。それらをどこかで参照して、Flash に強制的に含めるようにしてください。

stage1; stage2;

含めたいクラスの参照を追加する必要がありますが、これを行う必要があるのは 1 回だけです。

于 2013-03-17T20:29:10.967 に答える