【问题标题】:AS3:public variable vs .thisAS3:公共变量与 .this
【发布时间】:2012-10-30 16:41:13
【问题描述】:

如果有一个使用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);
    }
}

为什么一个似乎有效,而另一个无效?

【问题讨论】:

    标签: actionscript-3 public-method


    【解决方案1】:

    范围。在第一个示例中,您正在绘制已经在舞台上的精灵实例本身。第二个示例中的 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) 将其实际添加到视图中之前,它是不可见的。

    【讨论】:

    • 好的,现在我有另一个问题,addChild 解决了 rect 没有在舞台上显示的问题,但是现在当我在我的班级中创建一个公共 var rect,并想在另一个班级中使用它来检测碰撞,即 if(Chan.rect.hitTestObject(ball)==true){...do something...} 我得到一个错误:通过静态类型类的引用访问未定义的属性 rect?这里有什么问题?
    • 您将 rect 设为实例的 var (public var rect:Sprite)。所以要访问它,你不能说 Chan.rect 你必须使用 myInstanceOfTheChanClass.rect 。所以 var myChan:Chan = new Chan();现在你可以调用 myChan.rect.hitTestObject(ball)
    猜你喜欢
    • 2011-05-25
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2013-08-29
    • 2020-06-10
    • 2017-04-27
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多