2010-12-16 128 views
1

J'essaye de dupliquer un champ de texte. D'abord, je reçois le texte avec un mc.getChildAt (0), puis copiez tout le contenu dans un nouveau champ de texte. Le problème que j'ai est que getChildAt supprime le champ de texte du MovieClip dans lequel il se trouve. Comment obtenir les propriétés du champ de texte sans le déplacer? Ou peut-être que c'est quelque chose d'autre et que ce que je fais va bien. N'importe quel aperçu serait une aide énorme ...as3 dupliquer un champ de texte sans le retirer de l'étape

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; 

     } 

Répondre

1

Je pense que vous trouverez votre problème est ailleurs. getChildAt ne supprime pas sa cible de son parent, et la fonction que vous avez publiée fonctionne comme annoncé pour moi, la création d'un clip en double sans affecter l'original.

+0

votre droite, le problème était ailleurs, mais merci pour l'aide. – pfunc

0
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; 

    } 
2

Utilisez quelque chose comme ceci:

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 ([email protected] != 'readonly') { 
       try { 
        clone[[email protected]] = textField[[email protected]]; 
       } catch(error:Error) { 
        // N/A yet. 
       } 
      } 
     } 
     clone.defaultTextFormat = textField.getTextFormat(); 
     if (textField.parent && replace) { 
      textField.parent.addChild(clone); 
      textField.parent.removeChild(textField); 
     } 
     return clone; 
    } 
}