AS3:公共变量vs .this

时间:2012-11-10 16:19:13

标签: actionscript-3 public-method

如果有一个使用类Chan的主类,给定两个代码,例如

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);
    }
}

为什么一个似乎工作,而另一个不工作?

1 个答案:

答案 0 :(得分:0)

范围。在第一个示例中,您将绘制已在舞台上的sprite实例本身。第二个示例中的rect是静态的,属于该类。因此,虽然你正在绘制它,但它是不可见的...它只在记忆中。如果在第二个示例中再添加一行,它也将可见。

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)实际将其添加到视图中之后,它才会显示。