質問

「手作り」ボタン(_btn as instance名)があり、内部にdynamictextのみがあります(または、4つのボタンモードのそれぞれに1つの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.
役に立ちましたか?

解決

Flash Professionalでボタンシンボルを作成すると、シンボルはのインスタンスになります SimpleButton. 。ボタンシンボル、たとえばダイナミックテキストフィールドで作成したディスプレイオブジェクトにアクセスする場合は、次のようにアクセスする必要があります。 SimpleButton オブジェクト upState, overState, downStatehitTestState プロパティ。

ダイナミックテキストフィールドを取得するためにプロジェクトに含めることができるユーティリティ機能を作成しました。関数は呼び出されます getDTFFromSB()(SimpleButtonからDynamic Textfieldを入手してください)。

関数は引数を取ります simpleButtonstate. 。 simpleButton 議論は明らかにです SimpleButton 問題のオブジェクト、および state 議論とは、どの州の財産を指定することです(upState,overState,downStatehitTestState)テキストフィールドは、それぞれの文字列値、「up」、「over」、「down」、「hit」にあります。

関数はanを返します 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用にエクスポートしたボタンシンボルがあります。ボタンシンボルには、「アップ」状態とその動的なテキストフィールドが1つあります 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. 。次に、ステートメントを使用して戻りオブジェクトのタイプを決定します。 TextField 物体, I store it in a localテキストフィールドobject. Now if I trace the文章property of theTextfield`オブジェクト「A」を取得します。

他のヒント

「ボタン」はこのスクリプトでは不明です - 標準ボタンを作成する場合は、使用してください。 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