将Classic Textfield动态转换为TFL Textfield?

问题描述 投票:0回答:2

我有一个项目,在时间轴上有大量带有嵌入式文本字段的FLA。我们现在需要将这个项目本地化为阿拉伯语,从右到左文本(从XML中提取) - 我的理解是这只能用于TLF文本字段。

将所有这些texfields手动转换为TLF将是一项艰巨的任务。有没有办法以编程方式将普通文本字段设置为TLF文本字段?

flash actionscript-3 localization textfield
2个回答
2
投票

如果你很乐意为这个复杂的任务编写自己的JSFL脚本,我建议你获得一些浏览Flash DOM树的经验,并获取FriendsofEd的“扩展Flash MX 2004”的副本,或者至少看看它的JSFL参考预览PDF:http://www.friendsofed.com/books/1590593049/3049_Ref.pdf。虽然这已经过时,但概念,属性和方法并没有显着改变(如果有的话),除了一些较新的功能外,TLF文本字段就是其中之一!

通常可以在线上的Adobe Livedocs /帮助参考中找到更完整和更新的版本:

根据您的具体需要,您必须扫描:

  • 主时间表;
  • 主时间轴的实例有时间轴(MovieClip,Buttons,Graphics);
  • 图书馆符号的时间表;
  • 图书馆符号的孩子们的时间表(虽然,这可能是多余的,因为你已经采用了上一步的方式;

要扫描当前文档的元素时间轴,首先最好存储当前时间轴的引用,如下所示:

var doc = fl.getDocumentDOM();
var tl = doc.getTimeline();

注意:请注意,这将获取当前显示的时间轴的参考(无论它是“在位编辑”模式中的符号,还是其他场景等。确保它在您运行的任何时候选择“主时间轴”脚本,我相信以下内容会抓住它:

var tl = doc.timelines[0]; //Grabs the Main Timeline

注意:如果我错了,请更正以上内容!

不完全知道您的项目是否在不同的关键帧中具有TextFields,或者它们是否位于单帧时间轴中,扫描时间轴的每个帧以验证是否存在任何TextField实例是有意义的。

但要做到这一点,重要的是要注意Instances或JSFL术语“Elements”不能直接从Timeline对象中检索。你必须深入挖掘才能到达那里!

基本上你必须遍历这条道路:

  • 目前的Timeline;
  • Timeline的层次;
  • 每个Layer对象的帧;
  • 然后,每个Frame对象的元素;
  • 验证它是否是TextField实例;

一旦找到那些TextFields,就可以将它“转换”为TLF文本字段。转换,意思是......创建一个新的TLF文本字段,将经典TextField对象的所有可重用属性传递给它,将TLF文本字段放在经典TextField所在的相同索引(z深度)处,然后丢弃它。您可以选择设置阿拉伯字体支持所需的所有必需的嵌入和/或TLF属性。

如果不详细了解如何进行此转换过程,您可以看到仅仅扫描一个时间轴是一项艰巨的任务。并非不可能,只需几个步骤。

如果您仔细创建自己的JSFL函数来封装每个必要的步骤,以便可以在其他必要的扫描(其他时间轴,库符号等)中重复使用,那么您将大大降低此任务的复杂性!

希望能帮到你(即使它不是一个直接的解药,就像“这是答案,拿这个......”!)


1
投票

不,没有。当然,您可以创建自己的类来检查每个帧,并在运行时删除和替换现有的TextFields(循环显示列表并使用if (timeline.getChildAt(i) is TextField)选择这些应该可以工作,尽管它可能不会提高性能)。但我建议你不要。当您不必处理大量现有内容时,切换到下一个项目的TLF文本。

虽然使用阿拉伯字体可能是一个真正的麻烦 - 不仅字符的顺序必须颠倒,还有连字(两个或多个相邻字符的各种组合“合并”以形成更复杂的符号);几乎没有办法完全正确,即使你没有使用TLF文本 - 如果你没有使用输入TextFields,Flaraby可能会帮助你根据你现有的经典文本创建一个不错的版本。但是要做好准备 - 你可能不得不忍受一些权衡。

© www.soinside.com 2019 - 2024. All rights reserved.