如何在屁股内解决动态文本?
-
26-10-2019 - |
题
我有一个“手工制作”按钮(_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
, downState
和 hitTestState
特性。
我创建了一个实用程序功能,您可以将其包含在项目中以获取动态文本字段。该功能称为 getDTFFromSB()
(从SimpleButton获取动态的Textfield)。
该功能采用参数 simpleButton
和 state
. 。这 simpleButton
参数显然是针对的 SimpleButton
有问题的对象和 state
参数用于指定哪个状态属性(upState
,overState
,downState
和 hitTestState
)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();
}
}
}
}