为什么获取不到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.
我有一个扩展 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.