1

私は何かが欠けているかもしれません。これはよくある質問だと思いましたが、数日間にわたって Web を広範囲に検索しても、必要な答えが見つかりませんでした。どこに置いても機能する自己完結型のムービー クリップを作成したいと考えています。ただし、ムービー クリップを拡張するクラス内から、ムービー クリップで定義されたインスタンスにアクセスするのは難しいようです。

Flash Actionscript 2 (AS2) でコーディングしていますが、AS3 にも同じ問題があるのでしょうか。

次のシナリオでは、インスタンス「サークル」にどのようにアクセスしますか?

メイン タイムラインのムービー クリップには、インスタンス名「square」があります。Square.as で定義されたクラス Square は、このムービー クリップを拡張します。ムービー クリップ内で、別のムービー クリップが最初のフレームに配置され、インスタンス名は「circle」です。最初のフレームで宣言された変数もありますvar myName:String = "my name"。次のコードはコンパイルされません。

class Square extends MovieClip {
      function Square() {
          trace("Square.constructor, circle: " + circle);
          trace(" --- myName: " + myName);
      }
}

コンパイラ エラー: There is no property with name 'circle'.(myName と同じ)。

参照を追加this.しても役に立ちません。どうやら、コンパイラはクラス定義で変数を探しています。

を使用して_level0.square.circleも機能しますが、そのためにはクラスが独自のインスタンス パスを認識している必要があります。コンパイラ エラーは発生しませ_level0.square.myNameんが、値はundefined.

コンストラクター以外のメソッドでこれらの変数を参照すると、同じコンパイラ エラーが発生します。

ご協力ありがとうございました。

4

1 に答える 1

0

を使用して、問題を解決する方法を見つけましたeval(this).

class Square extends MovieClip {
    var base:MovieClip;

    function Square() {
        base = eval(this);
        trace("Square.constructor, circle: " + base.circle);
        trace(" --- myName: " + base.myName);
        onPress = procPress;
    }

    function procPress() {
        trace("procPress: " + base.circle);
        trace("procPress: " + base.myName);
    }
}

コンパイラ エラーはありません。コンストラクターでbase.myNameは、まだundefined(理解できる)です。procPressクリックによって呼び出される関数でbase.myNameは、正しい値があります。

于 2012-11-01T19:48:22.643 に答える