怕不是。如果要添加扩展文本字段类,则必须使用 ActionScript。
编辑:有一种黑客方式。来源:http ://board.flashkit.com/board/archive/index.php/t-738887.html
实际上,我以前遇到过这个确切的问题。就我而言,我试图创建一个具有额外行为的文本字段,供其他一些非编码艺术家使用。我会告诉你我原来的解决方案全是 as3,但有一个致命的缺陷,以及我目前的解决方案,它是 as3 和 jsfl 的组合。
所有 as3 解决方案都很棒,除了两件事:首先,它发生在运行时而不是构建时。这意味着有一小部分时间没有正确初始化电影。其次,如果电影中有多个帧,它就不能很好地播放。基本思想是检测您想要更改的文本字段,构建替换它们的东西,然后在舞台上替换它们。您可以通过扩展 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 脚本,如果它是一个文本字段,则转换为具有新包装类的基类的符号。这具有在创作时发生的优点,并且位置、实例名称和其他内容会自动保留。它的缺点是 jsfl 有很多烦人的怪癖需要解决。
编辑:当然,如果这仅适用于一部电影,您可以放弃 jsfl 转换器脚本,而只需手动完成。转换为符号 -> 包装器基类。