如何处理按钮内的动态文本?

时间:2011-07-25 15:51:23

标签: flash actionscript-3 programming-languages dynamic-text

我有一个“手工”按钮(_btn作为实例名称),里面只有一个dynamicText(或者我可以为四种按钮模式中的每一种说一个dynaticText)。 Up模式的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.

3 个答案:

答案 0 :(得分:1)

在flash professional中创建按钮元件时,该符号将成为SimpleButton的实例。如果要访问在按钮元件中创建的显示对象,例如动态文本字段,则必须通过SimpleButton对象的upStateoverState,{{1 }和downState属性。

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

该函数接受参数getDTFFromSB()simpleButtonstate参数显然适用于所讨论的simpleButton对象,而SimpleButton参数用于指定哪个状态属性(stateupState,{{1 }}和overState)textfield位于各自的字符串值:“up”,“over”,“down”和“hit”。

该函数返回一个downState对象,该对象是hitTestState对象,Object对象或null。

这是效用函数getDTFFromSB():

TextField

我还创建了一个使用它的例子。在库中我有一个按钮符号,我为actionscript导出。按钮符号在“up”状态下有一个动态文本字段,其Vector.<TextField属性的值为“a”。以下是文档类中的代码:

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

当我创建一个名为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的本地对象中。然后我使用if语句来确定返回对象的类型,如果它是getDTFFromSB()对象returnedObject TextField TextField text , I store it in a local TextField`对象,我得到“a”

答案 1 :(得分:0)

“按钮”在此脚本中未知 - 如果要创建标准按钮,请使用new Button()(使用大写字母B)。

我认为Button没有文本属性,只有一个叫做“label”。

尝试使用_btn.label

答案 2 :(得分:0)

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

    }

  }

}