当您在 Flash Professional 中创建按钮元件时,该元件将成为SimpleButton
. 如果您想访问您在按钮符号中创建的显示对象,例如动态文本字段,您必须通过SimpleButton
对象的upState
、overState
和属性访问downState
它。hitTestState
我创建了一个实用函数,您可以将其包含在您的项目中以获取动态文本字段。调用该函数getDTFFromSB()
(从 simplebutton 获取动态文本字段)。
该函数接受参数simpleButton
和state
。该simpleButton
参数显然是针对有SimpleButton
问题的对象,该state
参数用于指定文本字段位于哪个状态属性( 、 和 ),并使用相应的字符串值:“up”、“over”、“down”和upState
“ hit overState
” .downState
hitTestState
该函数返回一个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
TextFieldobject. Now if I trace the
文本property of the
TextField` 对象,我得到“a”。