2017-08-25 78 views
1

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

+1

'Sprite :: width'和'Sprite :: height'內的'Sprite'的潛在類型轉換可以是您的覆蓋原因不會影響容器寬度和高度的計算。未經證實ofc :) – Vesper

+0

您的預期成果是什麼?在'Square'中,如果查詢的是_imaginary_(從Point取得),但是您沒有真正改變任何大小(您的「空對象」沒有大小),則覆蓋width/height的_truthful_值。你做一個新的'容器'(也有零大小),並添加零大小的「Square」作爲孩子。總大小=零。你可以嘗試(未測試)爲'override public function get height():String',它返回爲'var _string:String =「hello」; return _string;'現在如果你使用trace(square.height)來檢查;'應該產生'hello'。它如何增加容器的大小?它不會 –

+0

PS:一個''Point'只是用來記錄一些位置/座標等。嘗試在'Square'類中創建一個'Shape'(或任何視覺內容)來影響報告的大小尺寸。你想通過重寫來實現什麼?也許有一個解決方案,如果你解釋@Vesper –

回答

2

重寫寬度和高度沒有工作,你可以看到在:

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

但我怕你是想在這個例子是不是要去工作。 爲什麼trace(container.width, container.height);給你0,0呢? 雖然實際的實現不可用我很確定它並不像獲得所有孩子的寬度和高度那麼簡單。如果是這樣,如果你有兩個相鄰的元素呢?輸出是200,100嗎? 100,200? 如果元素相互重疊(完全或部分)?

因此,不是簡單地獲取孩子的尺寸,而是通過做一些其他的魔術(抱歉,不知道它是如何實現的)來確定它的實際情況,它實際上是在檢查那裏有什麼。正如你所說,你的方形對象是空的,所以'爲什麼你得到0,0 0.

+1

謝謝,但正如你所解釋的,我不能那樣做。我使用'square.graphics.drawRect(0,0,_point.x,_point.y)'解決了這個問題'...我把一個'不可見的矩形'繪製到對象中,現在'container.width'和'container.height'正在工作和顯示100 100. – bio

+1

啊,這是訣竅,使隱形不空。 –

+0

@ VC.One,是的,但我仍然認爲這是一個快速解決方案(或葡萄牙語'gambiarra',這是一個不好編程的事情)。但工作...我現在要做...不方便的是'clear()'圖形在我的項目的某些部分每次我這樣做... – bio