AS3 - 是否可以从代码的其他部分访问精灵的子项?

时间:2013-06-27 19:50:51

标签: actionscript-3

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

例如

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的初学者,所以任何帮助都会受到赞赏:)

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;