我有一個名爲廣場對象,擴展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對象是空的,但我重寫了寬度和高度方法。我在第一個追蹤中得到了它,但不是在第二個追蹤中,如果它不起作用?
'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 –