Вопрос

У меня есть кнопка «ручной работы» (_btn в качестве имени экземпляра), с лишь динамическим текстом внутри (или могу сказать по одному Dynatictext для каждого из четырех режимов кнопки). Динамический текст для режима UP имеет имя экземпляра «_Text». Так что, если я работаю над AS of MoveieClip, который содержит кнопку, как я могу обратиться к тексту динамического текста?

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();
        }

    }

}

}

В чем проблема с моим кодом?

Access of possibly undefined property _text through a reference with static type flash.display:SimpleButton.
Это было полезно?

Решение

Когда вы создаете символ кнопки в Flash Professional, символ становится экземпляром SimpleButton. Анкет Если вы хотите получить доступ к объектам дисплея, которые вы создали в символе кнопки, например, Dynamic Textfield, вам нужно получить к нему доступ через SimpleButton объекты upState, overState, downState а также hitTestState характеристики.

Я создал функцию утилиты, которую вы можете включить в свой проект для получения динамических текстовых полей. Функция называется getDTFFromSB()(Получите динамическое текстовое поле от SimpleButton).

Функция принимает аргументы simpleButton а также state. Анкет А simpleButton аргумент, очевидно, для SimpleButton объект, о котором идет речь и state Аргумент заключается в том, чтобы указать, какое государственное имущество (upState,overState,downState а также hitTestState) Текстовое поле расположено с соответствующими значениями струн: «Up», «Over», «Down» и «Hit».

Функция возвращает Object объект, который либо TextField объект, Vector.<TextField объект или нулевый.

Вот функция утилиты 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

Я также создал пример его использования. В библиотеке у меня есть символ кнопки, который я экспортировал для ActionScript. Символ кнопки имеет одно динамическое текстовое поле в своем состоянии «вверх» и его text Стоимость имущества - «А». Вот код в классе документа:

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

Когда я создаю новый экземпляр символа кнопки, называемый _myButton, Я просматриваю это в getDTFFromSB() функционируйте и храните возвращенный объект в локальном объекте, называемый returnedObject. Анкет Затем я использую операторы, чтобы определить тип объекта возврата, и если это TextField объект, I store it in a localТекстовое полеobject. Now if I trace theтекстproperty of theОбъект Textfield` Я получаю "A".

Другие советы

«Кнопка» не известна в этом скрипте - если вы хотите создать стандартную кнопку, используйте new Button() (с капиталом б).

И я думаю, что кнопка не имеет текстового атрибута, кроме того, который называется «метка».

Попробуйте использовать _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();
      }

    }

  }

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top