我有一个“手工制作”按钮(_btn作为实例名称),其中只有一个DynamictExt(或者我可以说四个按钮模式中的每一个)。 UP模式的DynamictEXT具有“ _Text”的实例名称。因此,如果我正在处理包含按钮的MovieClip的工作,我该如何解决动态文本的文本?

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, downStatehitTestState 特性。

我创建了一个实用程序功能,您可以将其包含在项目中以获取动态文本字段。该功能称为 getDTFFromSB()(从SimpleButton获取动态的Textfield)。

该功能采用参数 simpleButtonstate. 。这 simpleButton 参数显然是针对的 SimpleButton 有问题的对象和 state 参数用于指定哪个状态属性(upState,overState,downStatehitTestState)TextField的位置为各自的字符串值:“ UP”,“ Over”,“ down”和“ 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”状态中具有一个动态的Textfield及其 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文本域object. Now if I trace the文本property of the我得到的textfield`对象。

其他提示

“按钮”在此脚本中不知道 - 如果要创建标准按钮,请使用 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();
      }

    }

  }

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top