我如何解决动态文本在一个按钮



我有一个"手工"按钮(_btn作为实例名),里面只有一个dynamicText(或者我可以说四个按钮模式中的每个都有一个dynamicText)。向上模式的dynamicText实例名为"_text"。因此,如果我正在处理包含按钮的movieClip的AS,我如何处理动态文本的文本?

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的实例。如果你想访问你在按钮符号中创建的显示对象,例如动态文本字段,你必须通过SimpleButton对象的upState, overState, downStatehitTestState属性访问它。

我已经创建了一个实用程序函数,您可以将其包含在项目中以获得动态文本字段。该函数名为getDTFFromSB()(从simplebutton获取动态文本字段)。

函数接受参数simpleButtonstatesimpleButton参数显然是针对有问题的SimpleButton对象,state参数用于指定文本字段位于哪个状态属性(upState, overState, downStatehitTestState)上,具有各自的字符串值:"up","over","down"one_answers"hit"。

函数返回一个Object对象,该对象可以是TextField对象、Vector.<TextField对象或null。

下面是实用函数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导出。按钮符号有一个处于"up"状态的动态文本域,其text属性的值为"a"。下面是文档类中的代码:

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的本地对象中。然后我使用if语句来确定返回对象的类型,如果它是TextField对象, I store it in a local TextField object. Now if I trace the文本property of the TextField '对象,我得到"a"。

"button"在这个脚本中是未知的-如果你想创建一个标准的按钮,使用new Button()(大写B)。

和我认为按钮没有文本属性,但一个名为"标签"。

尝试使用_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();
      }
    }
  }
}

最新更新