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子を操作できるようにしたいのですが、直接ではなく、 を介して操作したいと考えています。mySpritemySpritetmpTextField

私は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

スプライトに他に子がない場合は、次のように 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 に答える