如何扩展Flash(AS3)中舞台上已有的文本字段?
-
06-07-2019 - |
题
我正在寻找一种方法来扩展已经在Flash(AS3)舞台上的TextField 像这样的东西:
public class ChildTextField extends TextField
{
//code for childTextField comes here
}
我在舞台上放置了一个实例名为“thetextfield”的TextField。现在我想告诉flash这个textfield是ChildTextField类型。所以在我的Document Class中,我将textfield声明为ChildTextField:
public class DocumentClass extends Sprite()
{
public var thetextfield : ChildTextField;
}
这会引发类型强制失败错误。 是否可以像使用库符号一样更改Flash IDE中用于文本字段的类?
解决方案
不敢。如果要添加扩展文本字段类,则必须使用ActionScript。
编辑:有一种黑客方式。来源: http://board.flashkit.com/board/存档/ index.php的/叔738887.html实际上,我已经遇到了这个问题 之前的问题。就我而言,我是 试图创建一个文本域 其他一些其他行为 非编码艺术家使用。我会告诉 你是我原来的解决方案 as3,但有一个致命的缺陷,我的 当前的解决方案,这是一个 as3和jsfl的组合。
除了以外,所有as3解决方案都很棒 对于两件事:首先,它发生在 运行时而不是构建时。那 意味着有一个小而实际的部分 电影没有的时间 正确初始化。其次,确实如此 如果有多个,那就不好玩了 电影中的帧。基本的想法是 检测您想要的TextField 改变,建立东西来取代它们 用,然后在舞台上更换它们。您 可以通过扩展来做到这一点 TextField,或构建一个类 包含一个TextField并处理 它的接口。让我们说你是 做第一个。添加构造函数 SmartTextField复制所有 你关心的领域:
public function SmartTextField(TextField tf)
{
this.text = tf.text; //continue with copy of anything relevant.
}
主电影中的有代码 检测并替换TextFields 你想要替换
var toreplace:Array = findTextFields();
var tf:TextField;
var stf:SmartTextField;
var where:int;
for (int i = 0; i < toreplace.length;i++)
{ tf = TextField(toreplace[i]);
stf = new SmartTextField(tf);
where = getChildIndex(tf);
addChildAt(stf,where);
removeChild(tf);
}
这项工作正常,除了积分 上方。
JSFL解决方案有点过于复杂 详细说明,但是这里是 基本。有一个包装的as3类 具有新行为的文本字段 想。写一个jsfl脚本 迭代选定的项目,和 如果是文本字段,则转换为 符号与您的新基类 包装类。这具有优点 它发生在作者时间,并且 像position,instancename和 其他的东西是自动的 保存。它有缺点 那个jsfl有点烦人 怪癖要解决。
编辑:当然,如果这只是一个 单部电影,你可以放弃 jsfl转换器脚本,就这么做 用手。转换为符号 - &gt;包装纸 基类。