为什么获取不到Sprite扩展对象容器中的override宽高?

Why can not get the override width and height in the container of Sprite extended object?

我有一个扩展 Sprite 的名为 Square 的对象:

package {

    import flash.display.Sprite;
    import flash.geom.Point;

    public class Square extends Sprite {

        private var _point:Point = new Point(100, 100);

        public function Square() {
            // empty object
        }

        override public function set height(n:Number):void {
            _point.y = n;
        }

        override public function set width(n:Number):void {
            _point.x = n;
        }

        override public function get height():Number {
            return _point.y;
        }

        override public function get width():Number {
            return _point.x;
        }

    }
}

并且在我的主文档 class 中,我试过访问方形容器的宽度和高度,如下所示:

import flash.display.Sprite;

var container:Sprite = new Sprite();
var square:Square = new Square();

container.addChild(square);

trace(square.width, square.height); // 100 100
trace(container.width, container.height); // 0 0

我知道我的 Square 对象是空的,但我重写了 width 和 height 方法。我在第一条跟踪中得到了它,但在第二条跟踪中没有,它应该不起作用吗?

覆盖宽度和高度确实有效,您可以在以下位置看到:

trace(square.width, square.height); // 100 100

但恐怕在这个例子中它不会像您希望的那样工作。 为什么 trace(container.width, container.height); 给你 0, 0 呢? 虽然实际实现不可用,但我很确定它不像获取所有子项的宽度和高度那么简单。如果是的话,如果你有两个相邻的元素怎么办?输出会是 200, 100 吗? 100、200? 如果元素相互重叠(完全或部分重叠)怎么办?

因此,不是简单地获取子 Flash 的尺寸,而是通过其他一些魔术(抱歉,不知道它是如何实现的)来计算它,它实际上是在检查那里有什么。正如你所说,你的方形对象是空的,所以你得到 0, 0.