2013-04-30 91 views
0

enter image description hereAS3:如何使用不在顯示列表中的類在舞臺(顯示列表)上處理類的屬性?

嗨,大家好,我 對第二階段的對象,所以我相信他們是在顯示列表以及(與progress_mc,Ship_mc)。我有Calculator類,它不代表任何視覺形狀或任何東西,但as3代碼,因此它不在顯示列表中。 什麼是使用Progress_mc屬性的最佳方式?

示例:Calculator_as必須接收Progress_mc.width任何時間寬度已被更改,經過一些計算後,計算器必須將一些計算結果發送到Ship_mc.x。

我在想如果我必須在舞臺上添加Child(計算器),所以我可以訪問Calculator.as中的這些MC,但這個類不是可視對象,所以我不確定這是否是正確的方法。 或者我有(下面的代碼)爲此在計算器類,然後嘗試訪問屬性,但我這樣不會工作或者是因爲性能不會是實例的舞臺上:

private var prg:Progress_mc = new Progress_mc; 

private var ship:Ship_mc = new Ship_mc;  

或者我有將它們添加爲計算器的子項並在舞臺上添加計算器? 另一個問題是,我不能只使用setter和getter作爲計算器中的靜態函數,因爲「width」屬性是隻讀的,不能用於靜態函數(錯誤:?)

什麼是最好的訪問這些屬性並操縱它們的方式?

非常感謝你們的好人!

回答

1

我假設Calculator實例是有點全局可訪問的。在這種情況下,我想你有

public function setProgressMcWidth(width:Number):void {...} 

在Calculator類中。只要progressMc的寬度更新,就需要調用該函數。後來,當計算器需要通過一些寬度shipMc,可以調度的事件,如

package { 
    public class CalculatorEvent extends Event { 
     private var _width:Number = width; 
     public function CalculatorEvent(type:String, width:Number) 
     { 
      super(type); 
      _width = width; 
     } 
     override public function clone():Event { 
      var ret:CalculatorEvent = new CalculatorEvent(type, _width); 
      return ret; 
     } 
     public function getWidth():Number {return _width;} 
    } 
} 

,並有調度代碼計算器,如:

dispatch(new CalculatorEvent("shipWidthCalculated", calculatedShipWidth)); 

船舶MC,反過來,會聽計算器的事件如:

calculator.addEventListener("shipWidthCalculated", handleShipWidthCalculated); 
private function handleShipWidthCalculated(event:CalculatorEvent):void { 
    trace('calculator calculated my width to be: ' + event.getWidth); 
} 
+0

謝謝catholicon。這一定會奏效。你認爲一般的類似問題最好的辦法是什麼?我是否必須總是使用「合成」方法? – irnik 2013-05-01 00:11:05

+0

據我所知,如果你能證明組合語義是合理的,就應該使用組合。例如按鈕在語義上具有標籤,所以很好地設計它。否則,如果語義只是指導類型相對獨立並且只需要一種通信方式,則控制器對象(可以訪問所有內容)應該設置跨這些類型的綁定。 – catholicon 2013-05-01 01:04:18

0

但是,如果計算器實例不在顯示列表中,它將不會收到任何事件。