0

クラス Chan を使用するメイン クラスがある場合、たとえば 2 つのコードが与えられます。

public class Chan extends Sprite
{

    public function Chan():void
    {
       this.graphics.beginFill(0x123456); 
       this.graphics.drawRect(100,100,30,30);
    }
}

public class Chan extends Sprite
{
    public static var rect:Sprite=new Sprite(); 
    public function Chan():void
    {
       rect.graphics.beginFill(0x123456); 
       rect.graphics.drawRect(100,100,30,30);
    }
}

なぜ一方が機能しているように見えて、もう一方が機能しないのですか?

4

1 に答える 1

0

範囲。最初の例では、すでにステージ上にあるスプライトインスタンス自体を描画しています。2番目の例のrectは静的であり、クラスに属しています。ですから、あなたはそれに絵を描いていますが、それは見えません...それは記憶の中にあるだけです。2番目の例にもう1行追加すると、それも表示されます。

public class Chan extends Sprite
{
    public static var rect:Sprite=new Sprite(); 
    public function Chan():void
    {
        rect.graphics.beginFill(0x123456); 
        rect.graphics.drawRect(100,100,30,30);
        this.addChild(rect);
    }
}

編集:

これについて少し詳しく説明したいと思います。rectが静的変数であるという事実は主な問題ではありませんでした。私の答えではそれは静的であると述べましたが、それがあなたを混乱させたくありませんでした。それが機能しない理由は、描画していたスコープが表示されなかったためです...それは単に変数でした。だからそれが言ったとしても:

public var rect:Sprite = new Sprite();

addChild(rect)を呼び出して実際にビューに追加するまで、表示されません。

于 2012-11-10T16:39:53.913 に答える