为什么无法在Sprite扩展对象的容器中获取覆盖宽度和高度?
我有一个名为广场对象,扩展Sprite:为什么无法在Sprite扩展对象的容器中获取覆盖宽度和高度?
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;
}
}
}
在我的主文档类,我试过访问宽度和方形容器的高度,这样的:
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对象是空的,但我重写了宽度和高度方法。我在第一个追踪中得到了它,但不是在第二个追踪中,如果它不起作用?
重写宽度和高度没有工作,你可以看到在:
trace(square.width, square.height); // 100 100
但我怕你是想在这个例子是不是要去工作。 为什么trace(container.width, container.height);
给你0,0呢? 虽然实际的实现不可用我很确定它并不像获得所有孩子的宽度和高度那么简单。如果是这样,如果你有两个相邻的元素呢?输出是200,100吗? 100,200? 如果元素相互重叠(完全或部分)?
因此,不是简单地获取孩子的尺寸,而是通过做一些其他的魔术(抱歉,不知道它是如何实现的)来确定它的实际情况,它实际上是在检查那里有什么。正如你所说,你的方形对象是空的,所以'为什么你得到0,0 0.
谢谢,但正如你所解释的,我不能那样做。我使用'square.graphics.drawRect(0,0,_point.x,_point.y)'解决了这个问题'...我把一个'不可见的矩形'绘制到对象中,现在'container.width'和'container.height'正在工作和显示100 100. – bio
啊,这是诀窍,使隐形不空。 –
@ VC.One,是的,但我仍然认为这是一个快速解决方案(或葡萄牙语'gambiarra',这是一个不好编程的事情)。但工作...我现在要做...不方便的是'clear()'图形在我的项目的某些部分每次我这样做... – bio
'Sprite :: width'和'Sprite :: height'内的'Sprite'的潜在类型转换可以是您的覆盖原因不会影响容器宽度和高度的计算。未经证实ofc :) – Vesper
您的预期成果是什么?在'Square'中,如果查询的是_imaginary_(从Point取得),但是您没有真正改变任何大小(您的“空对象”没有大小),则覆盖width/height的_truthful_值。你做一个新的'容器'(也有零大小),并添加零大小的“Square”作为孩子。总大小=零。你可以尝试(未测试)为'override public function get height():String',它返回为'var _string:String =“hello”; return _string;'现在如果你使用trace(square.height)来检查;'应该产生'hello'。它如何增加容器的大小?它不会 –
PS:一个''Point'只是用来记录一些位置/坐标等。尝试在'Square'类中创建一个'Shape'(或任何视觉内容)来影响报告的大小尺寸。你想通过重写来实现什么?也许有一个解决方案,如果你解释@Vesper –