as3 дублирует текстовое поле, не удаляя его со сцены - PullRequest
1 голос
/ 16 декабря 2010

Я пытаюсь продублировать текстовое поле.Сначала я получаю текст с помощью mc.getChildAt (0), а затем копирую все содержимое в новое текстовое поле.У меня проблема в том, что getChildAt удаляет текстовое поле из мувиклипа, в котором оно находится. Как получить свойства текстового поля, не перемещая его?Или, может быть, это что-то еще, и то, что я делаю, прекрасно.Любое понимание было бы огромной помощью ...

var dupeTField:MovieClip = duplicateTextField($value.sourceImg.getChildAt(0));

private function duplicateTextField($textField):MovieClip
        {
            var currTextField:TextField = $textField;
            var dupeTextHolder:MovieClip = new MovieClip();
            var dupeTextField:TextField = new TextField();
            dupeTextField.text = currTextField.text;
            dupeTextField.textColor = currTextField.textColor;
            dupeTextField.width = $textField.width;
            dupeTextField.height = $textField.height;
            dupeTextHolder.addChild(dupeTextField);


            return dupeTextHolder;

        }

Ответы [ 3 ]

2 голосов
/ 09 ноября 2012

Используйте что-то вроде этого:

package com.ad.common {
    import flash.text.TextField;
    import flash.utils.describeType;

    public function cloneTextField(textField:TextField, replace:Boolean = false):TextField {
        var clone:TextField = new TextField();
        var description:XML = describeType(textField);
        for each (var item:XML in description.accessor) {
            if (item.@access != 'readonly') {
                try {
                    clone[item.@name] = textField[item.@name];
                } catch(error:Error) {
                    // N/A yet.
                }
            }
        }
        clone.defaultTextFormat = textField.getTextFormat();
        if (textField.parent && replace) {
            textField.parent.addChild(clone);
            textField.parent.removeChild(textField);
        }
        return clone;
    }
}
1 голос
/ 16 декабря 2010

Я думаю, вы обнаружите, что ваша проблема где-то еще.getChildAt не удаляет свою цель из родительской, и опубликованная вами функция работает так, как мне было объявлено, создавая дублированный клип, не затрагивая оригинал.

0 голосов
/ 16 декабря 2010
    private var dupeTField:MovieClip;

    private function init():void
    {         
        //getChildAt will return a DisplayObject so you
        //should cast the return DisplayObject as a TextField
        var tf:TextField = $value.sourceImg.getChildAt(0) as TextField;

        dupeTField = duplicateTextField(tf);

        //don't forget to add your duplicate to the Display List
        //& make sure to change the x, y properties so that 
        //it doesn't sit on top of the original
        addChild(dupeTField ); 

    }

    private function duplicateTextField(textField:TextField):MovieClip
    {
        var dupeTextHolder:MovieClip = new MovieClip();
        var dupeTextField:TextField = new TextField();

        //if you pass a TextField as a parameter, you don't need to
        //replicate the instance inside the function, simply access the
        //parameter directly.
        //You may consider copying the TextFormat as well
        dupeTextField.defaultTextFormat = textfield.defaultTextFormat;

        dupeTextField.text = textField.text;
        dupeTextField.textColor = textField.textColor;
        dupeTextField.width = textField.width;
        dupeTextField.height = textField.height;

        dupeTextHolder.addChild(dupeTextField);


        return dupeTextHolder;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...