Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在Sprite上使用getter/setter方法时出错_Actionscript 3_Class_Static_Setter_Getter - Fatal编程技术网

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

Actionscript 3 在Sprite上使用getter/setter方法时出错,actionscript-3,class,static,setter,getter,Actionscript 3,Class,Static,Setter,Getter,我正在尝试创建一个扩展Sprite的类,该类附带一些私有属性,并且能够使用getter和setter读取和写入这些属性。 简单的。。。但是编译器抛出这个错误“通过静态类型flash.display:Sprite的引用访问可能未定义的属性speed” 如果我将类设置为扩展MovieClip对象,它就会起作用。 有人能给我解释一下这背后的逻辑吗?为什么我不能使用精灵的getter和setter 下面是一个示例代码: package { import flash.display.Sprit

我正在尝试创建一个扩展Sprite的类,该类附带一些私有属性,并且能够使用getter和setter读取和写入这些属性。 简单的。。。但是编译器抛出这个错误“通过静态类型flash.display:Sprite的引用访问可能未定义的属性speed” 如果我将类设置为扩展MovieClip对象,它就会起作用。 有人能给我解释一下这背后的逻辑吗?为什么我不能使用精灵的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();
        }

    }

}

您需要声明车辆的实例,因为精灵不像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.

您是将车辆实例键入Sprite类型还是vehicle类型?如果是前者,你需要在获得/设置道具之前将其转换为车辆。你可以使用精灵获得/设置,其他地方一定有问题。请将代码张贴在实例化车辆的位置,以及使用访问器的位置;儿童(车辆);谢谢,如果它被声明为车辆,它就可以工作。还请记住,在某些情况下,将其键入精灵并通过强制转换访问其独特属性可能是一种良好的做法。例如(车辆作为车辆)。速度。这样,您就可以使用相同的变量,但在不同的实现中为相似的类型分离逻辑不要忘记调用构造函数:new Vehicle()@马克·诺尔:我正在给构造器打电话,也许你对第二种情况感到困惑,如果我将车辆实例转换为车辆…@golia,马克可能被你不使用括号的选择误导了。虽然在没有参数的情况下可以省略它们,但这会使Adobe推荐的代码标准变得愤怒,一些不知道可以省略它们的人会感到困惑。@sam you是对的,不知道这种语法。我觉得有点困惑,好像你没有调用构造函数。谢谢