Question

J'ai un bouton « fait main » (de _btn comme nom d'instance), avec seulement l'intérieur DynamicText (ou puis-je dire un dynaticText pour chacun des quatre modes de bouton). Le DynamicText pour le mode Up a un nom d'instance de « _TEXT ». Donc, si je travaille sur l'AS du MovieClip qui contient le bouton, comment puis-je aborder le texte du texte dynamique?

package  {
import flash.display.MovieClip;
import flash.display.SimpleButton;

public class container extends MovieClip {
    var _btn:button;

    public function container() {
        _btn= new button;
        this.addChild(_btn);
        switch (_btn._text.text)
        {
            case "a": doAFunction();
            case "b": doBFunction();
            case "c": doCFunction();
        }

    }

}

}

Quel est le problème avec mon code?

Access of possibly undefined property _text through a reference with static type flash.display:SimpleButton.
Était-ce utile?

La solution

Lorsque vous créez un symbole de bouton professionnel flash, le symbole devient une instance de SimpleButton. Si vous souhaitez accéder aux objets d'affichage que vous avez créés dans le symbole de bouton, de dynamique textfield par exemple, vous devez accéder via l'SimpleButton d'objet upState, overState, downState et propriétés hitTestState.

J'ai créé une fonction d'utilité que vous pouvez inclure dans votre projet pour obtenir textfields de dynamique. La fonction est appelée getDTFFromSB() (get textfield dynamique de SimpleButton).

La fonction prend les arguments simpleButton et state. L'argument simpleButton est évidemment pour l'objet SimpleButton en question, et l'argument state est pour spécifier que le champ de texte se trouve sur la propriété de l'État (upState, overState, downState et hitTestState) les valeurs de chaîne respectives: « up », « sur », "down" et "hit".

La fonction retourne un objet Object qui est soit un objet TextField, objet Vector.<TextField ou nulle.

Voici la fonction d'utilité getDTFFromSB ():

package utils
{
    import flash.display.DisplayObject;
    import flash.display.DisplayObjectContainer;
    import flash.display.SimpleButton;
    import flash.text.TextField;

    /**
     * get dynamic textfield from simple button
     */
    public function getDTFFromSB(simpleButton:SimpleButton, state:String = "up"):Object
    {
        var returnObject:Object;

        var displayObject:DisplayObject;

        switch(state)
        {
            case "up" : displayObject = simpleButton.upState;
            case "over" : displayObject = simpleButton.overState;
            case "down" : displayObject = simpleButton.downState;
            case "hit" : displayObject = simpleButton.hitTestState;

        }// end switch

        if(displayObject is TextField)
        {
            returnObject = displayObject;
        }
        else if(displayObject is DisplayObjectContainer)
        {
            var doc:DisplayObjectContainer = displayObject as DisplayObjectContainer;
            var textFields:Vector.<TextField> = new Vector.<TextField>();

            for(var i:uint = 0; i < doc.numChildren; i++)
            {
                if(doc.getChildAt(i) is TextField) 
                textFields.push(doc.getChildAt(i));

            }// end for

            if(textFields.length == 0) returnObject = null
            else if(textFields.length == 1) returnObject = textFields[0]
            else if(textFields.length > 1) returnObject = textFields;

        }
        else
        {
            returnObject = null;

        }// end else

        return returnObject;

    }// end function

}// end package

J'ai aussi créé un exemple de son utilisation. Dans la bibliothèque, j'ai un symbole de bouton que je actionscript pour exporté. Le symbole de bouton a une dynamique textfield dans son état « haut » et la valeur de sa propriété text est « un ». Voici le code dans la classe de document:

package
{
    import utils.getDTFFromSB;
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;

    public class Main extends Sprite
    {
        private var _myButton:SimpleButton;

        public function Main()
        {
            if(stage) init()
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            _myButton = new MyButton();
            addChild(_myButton);

            var returnedObject:Object = getDTFFromSB(_myButton);

            var textField:TextField;

            if(returnedObject is TextField)
            {
                textField = TextField(returnedObject);

            }
            else if(returnedObject is Vector.<TextField>)
            {
                textField = Vector.<TextField>(returnedObject)[0];

            }
            else if(returnedObject == null)
            {
                throw new Error("null value returned from getDTFFromSB() method");

            }// end if

            trace(textField.text) // ouput: a

        }// end function

    }// end class

}// end package

Quand je crée une nouvelle instance du symbole de bouton, appelé _myButton, je l'analyse syntaxique à la fonction getDTFFromSB() et stocker l'objet retourné dans un objet local, appelé returnedObject. Puis-je utiliser si des déclarations pour déterminer le type de l'objet de retour, et si elle est un TextField object, I store it in a localTextFieldobject. Now if I trace thetextproperty of theTextField` objet que je reçois « a ».

Autres conseils

"bouton" On ne sait pas dans ce script -. Si vous voulez créer un bouton standard, l'utilisation new Button() (capital B)

et je pense que le bouton n'a pas d'attribut de texte, mais celui qui est appelé « label ».

essayez d'utiliser _btn.label.

package  {
  import flash.display.MovieClip;
  //import flash.display.SimpleButton;
  import fl.controls.Button

  public class container extends MovieClip {
    var _btn:button;
    public function container() {
      _btn= new button;
      this.addChild(_btn);
      switch (_btn.label)
      // switch (_btn._text.text)
      {
          case "a": doAFunction();
          case "b": doBFunction();
          case "c": doCFunction();
      }

    }

  }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top