0

わかりました、これは私の問題です:ミラーという名前のクラスに変数があります

public var line:Sprite = new Sprite(); 

その変数をMovieClipという名前の別のクラスで使用したいと思います。クラスをMovieClipクラスにインポートしました。

   public class MovieClips extends MovieClip
{
    import Mirror;
    public function MovieClips(radius:int, _x:int, _y:int,size:int,span:int,addl:Array) 
    {....

しかし、私がこのようなことをしようとすると:

if (Mirror.line.hitTestObject(ball) == true) {
                    speedY *= -1;
                }

エラーのように表示されます。静的型クラスの参照を介した、未定義の可能性のある敷地境界線へのアクセス。何を間違えたのかわかりませんか?クラスを間違った方法でインポートしていますか?

4

2 に答える 2

0

のようなクラスがあり、のようなMirrorことを行う場合Mirror.line、それはlineという名前の静的クラス変数にアクセスしようとしていることを意味します。静的変数/メソッドは、そのクラスのインスタンスではなく、クラスに関連付けられています。

行を静的変数として定義していないため、エラーが発生します。ただし、静的変数にするかどうかはわかりません。おそらく、Mirrorクラスをクラスのインスタンスと混同しているだけMirrorです。

どこかでMirrorクラスのインスタンスを作成している可能性があります。
var myMirror:Mirror = new Mirror()または、FlashProを使用している場合はタイムライン上でインスタンスをドラッグします(例として「myMirror」のインスタンスを指定できます)。

lineMirrorクラスのインスタンスにアクセスします。したがって、上記の場合はになりますmyMirror.line

クラスをインポートしても、そのクラスのインスタンスにアクセスすることはできません。したがって、クラスMirror内からのインスタンスにアクセスできるようにする場合は、そのクラスMoveClipsへの参照を渡すか、parentキーワードを使用して取得する必要があります。正しいスコープに(したがって、MirrorインスタンスとMovieClipsインスタンスが同じタイムライン/親にある場合はMirror(MovieClip(parent).myMirror).line、親がMovieClipタイプであると仮定して実行できます)。


静的変数として使用したい場合は、静的アクセス修飾子をその定義に追加するだけです。

public static var line:Sprite

ただし、静的変数のインスタンスが作成されているかどうかに関係なく、静的変数は常にメモリ内にあることに注意してください。

于 2012-11-10T22:30:09.880 に答える
0

次の例のように、オブジェクトMirrorをオブジェクトに渡す必要があります。MovieClips

package {

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var mirror:Mirror = new Mirror();
            var movieClips:MovieClips = new MovieClips(mirror);

        }// end function

    }// end class

}// end package

import flash.display.MovieClip;

class Mirror extends MovieClip {

    public var line:MovieClip;

    public function Mirror():void {

        line = new MovieClip();

    }// end function

}// end class

class MovieClips extends MovieClip {

    public function MovieClip(mirror:Mirror):void {

        mirror.line;

    }// end function

}// end class

Mirror.lineまた、読み取り専用にすることでこれを改善できます。

class Mirror extends MovieClip {

    private var _line:MovieClip;

    public function get line():MovieClip {

        return _line;

    }// end function

    public function Mirror():void {

        _line = new MovieClip();

    }// end function

}// end class
于 2012-11-13T20:21:34.820 に答える