2013-06-27 39 views
2

我正在創建一個精靈,附加一些圖形和文本框。然後我將精靈返回到代碼的另一部分。此時,是否可以通過父Sprite訪問文本字段?AS3 - 是否可以從代碼的其他部分訪問精靈的孩子?

例如

private function foo():Sprite 
{ 
    var mySprite:Sprite = new Sprite(); 
    mySprite.graphics.drawRect(0, 0, 200, 200); 

    var tmpTextField:TextField = new TextField; 
    tmpTextField.text = "SOME TEXT HERE"; 
    mySprite.addChild(tmpTextField); 

    return mySprite 
} 

現在我希望能夠操縱tmpTextField孩子的父母mySprite的,而是通過mySprite,而不是直接通過tmpTextField

我在AS3初學者所以任何幫助,將不勝感激:)

+0

澄清你是問。或者說出你想要做什麼。 –

+0

另一個函數遍歷數組,併爲數組中的每個元素調用'foo'。 'foo'返回具有'tmpTextField'作爲子項的'mySprite'。我希望循環函數能夠操作'tmpTextField',但是我不能直接這樣做,因爲我不能真的將'mySprite'和'tmpTextField'存儲在單獨的變量中,並且仍然使它們彼此關聯。也許我可以,但我不知道如何。 –

+0

在as3中,對象通過引用傳遞,因此您可以將該引用存儲在一個類級別memeber IE的數組中:private var myArra:Array = new Array();那麼只要你有該數組的正確密鑰或索引,那麼你可以訪問該對象。 –

回答

3

正確的解決這個問題的方法是使用OOP。作出這樣的擴展Sprite,對你的TextField作爲屬性的類:

public class TextHolder extends Sprite 
{ 

    private var _field:TextField; 

    public function TextHolder() 
    { 
     graphics.drawRect(0, 0, 200, 200); 

     _field = new TextField(); 
     addChild(_field); 
    } 

    public function get field():TextField{ return _field; } 

} 

然後更新您的代碼:

private function foo():TextHolder 
{ 
    var mySprite:TextHolder = new TextHolder(); 
    mySprite.field.text = "SOME TEXT HERE"; 


    return mySprite; 
} 
+0

是的,這是正確的解決方案,我之前想到過,但由於我還沒有學會如何正確地做OOP,我一直在尋找其他方法,但是要感謝您確認這是最終的正確方法。 –

2

如果你的精靈有沒有其他的孩子,你可以訪問該文本字段,如下所示:

var spr: Sprite = foo(); 
    var txt: TextField = spr.getChildAt(0) as TextField; 

做不到這一點,你可以始終命名TextField,所以稍後可以更容易地找到它。在你的函數,你加:

... 
    tmpTextField.name = "myTF"; 
    ... 

然後,您可以參考它的功能範圍之外如下:

var txt: TextField = foo().getChildByName("myTF") as TextField; 
+0

是的,這是一個聰明的做法。我會試試看! –

相關問題