2012-08-28 50 views
0

有沒有一種方法可以直接從屬性/組件參數窗口將對象引用傳遞給組件?使用[Inspectible]標籤只允許我輸入字符串,而不是實際的對象引用。從屬性窗口向組件添加對象引用

例如,我有一個名爲「旋鈕」的自定義組件,它應該在其打開的舞臺上存放對門的引用。我知道這可以用「knob.door = someDoor;」的代碼很容易地完成。但是由於場景中有很多對象,我寧願我可以通過屬性窗口直觀地進行操作。

回答

0

我不認爲你可以這樣做。你最好的選擇是傳入一個字符串標識符(如果你的剪輯深度嵌套,可能是一個完整的點分離路徑),然後在你的自定義組件中實現代碼以按名稱查找該項目。

我有哪些相對勾畫出自身水平和垂直前身組件的自定義組件,所以我這樣做:

protected var horizontalPredecessor:String = ""; 

[Inspectable(name = "HorizontalPredecessor", type = String, defaultValue="")] 
public function set HorizontalPredecessor($value:String):void 
{ 
    horizontalPredecessor = $value; 
    drawNow(); 
} 

override protected function draw():void 
{ 
    if (parent) 
    { 
     if (horizontalPredecessor != "") 
     { 
      var hp:DisplayObject = parent.getChildByName(horizontalPredecessor); 
      if (hp) 
      { 
       x = hp.y + hp.height + horizontalSpacing; 
      } 
     } 
    } 
} 

...因爲所有這些組件共享相同的父它是由易。

另外,如果只有一扇門,你可以把一個單身,並給它一個靜態引用,就像這樣:

public class Door 
{ 
    private static var _singleton:Door; 

    public static function get Singleton():Door 
    { 
     if(!_door) _door = new Door(); 
     return _door; 
    } 

} 

那麼你的手柄可以直接參考Door.Singleton和你沒有擔心傳遞任何東西。或者,您可以在Door類中有一個門陣列的靜態數組,併爲您的句柄指定一個索引號以將其鏈接到特定的門。

+0

謝謝!我完全忘了_getChildByName_方法。這樣我可以只插入實例名稱,因爲它們都應該是唯一的,所以不應該有問題。 –