我正在创建一个精灵,为它添加一些图形和一个文本字段。然后我将精灵返回到代码的另一部分。此时,是否可以通过父精灵访问文本域?
例如
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 :(得分: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;