2

我正在创建一个精灵,将一些图形附加到它和一个文本字段。然后我将精灵返回到代码的另一部分。此时,是否可以通过父精灵访问文本字段?

例如

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 的初学者,所以任何帮助将不胜感激:)

4

2 回答 2

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;
}
于 2013-06-27T22:39:46.143 回答
2

如果您的 Sprite 没有其他子项,您可以像这样访问 TextField:

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

如果做不到这一点,您始终可以为 TextField 命名,以便以后更容易找到。在您的函数中,您添加:

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

然后,您可以在函数范围之外引用它,如下所示:

    var txt: TextField = foo().getChildByName("myTF") as TextField;
于 2013-06-27T20:47:30.690 回答