Buttom内の動的テキストに対処するにはどうすればよいですか?
-
26-10-2019 - |
質問
「手作り」ボタン(_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
, downState
と hitTestState
プロパティ。
ダイナミックテキストフィールドを取得するためにプロジェクトに含めることができるユーティリティ機能を作成しました。関数は呼び出されます getDTFFromSB()
(SimpleButtonからDynamic Textfieldを入手してください)。
関数は引数を取ります simpleButton
と state
. 。 simpleButton
議論は明らかにです SimpleButton
問題のオブジェクト、および state
議論とは、どの州の財産を指定することです(upState
,overState
,downState
と hitTestState
)テキストフィールドは、それぞれの文字列値、「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 the
Textfield`オブジェクト「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();
}
}
}
}