在Sprite上使用getter / setter方法时出错

时间:2011-08-02 16:14:26

标签: actionscript-3 class static setter getter

我正在尝试创建一个扩展Sprite的类,附加一些私有属性,并能够使用getter和setter读取和写入这些属性。 简单...但编译器抛出此错误“通过静态类型flash.display:Sprite的引用访问可能未定义的属性速度。” 如果我将我的类设置为扩展MovieClip对象,它就可以工作。 有人能解释一下这背后的逻辑吗?为什么我不能使用带有Sprite的getter和setter?

以下是示例代码:

package  {

    import flash.display.Sprite;

    public class Vehicle extends Sprite{

        private var _speed:uint = 3;


        public function get speed():uint {
            return _speed;
        }

        public function set speed(value:uint):void {
            _speed = value;
        }


        public function Vehicle() {
            super();
        }

    }

}

1 个答案:

答案 0 :(得分:2)

您需要声明Vehicle的实例,因为Sprites不像Movieclips那样动态。

所以,这样做不起作用:

var vehicle:Sprite = new Vehicle;
vehicle.speed = 5;

这应该有效:

var vehicle:Vehicle= new Vehicle;
vehicle.speed = 5;

var vehicle:Sprite = new Vehicle;
Vehicle(vehicle).speed = 5; //We cast the vehicle instance to Vehicle type.

此外,我们可以使用as运算符进行投射:

var vehicle:Sprite = new Vehicle;
(vehicle as Vehicle).speed = 5; //We cast the vehicle instance to Vehicle type.