Конвертировать Classic Textfield в TFL Textfield динамически? - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть проект, в котором есть множество FLA со встроенными текстовыми полями на шкале времени. Теперь нам нужно локализовать этот проект на арабский язык с текстом справа налево (взят из XML) - насколько я понимаю, это возможно только с текстовыми полями TLF.

Это будет огромной задачей, чтобы вручную преобразовать все эти текстовые поля в TLF. Есть ли способ программно установить обычное текстовое поле в текстовое поле TLF?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Если вам удобно писать собственный JSFL-сценарий для этой сложной задачи, я бы порекомендовал вам получить некоторый опыт навигации по дереву Flash DOM и взять копию "Extennding Flash MX 2004" от FriendsofEd или, по крайней мере, посмотретьв своем предварительном просмотре JSFL PDF: http://www.friendsofed.com/books/1590593049/3049_Ref.pdf.Хотя это устарело, концепции, свойства и методы не претерпели существенных изменений (если вообще), за исключением некоторых более новых функций, очевидно, текстовые поля TLF являются одним из них!

Более полным и обновленнымКак правило, эту версию можно найти в справочной системе Adobe Livedocs / Help:

Для ваших конкретных потребностей вам потребуется отсканировать:

  • Основная временная шкала;
  • Экземпляры главной временной шкалы, которые имеют временные линии (MovieClip, Кнопки, Графика);
  • Временные шкалы библиотечных символов;
  • Временные шкалы детских библиотечных символов (хотя это может быть избыточно, поскольку вы уже делаете это таким же образом, как и предыдущиеstep;

Чтобы сканировать временную шкалу текущего документа на наличие элементов, сначала рекомендуется сохранить ссылку на текущую временную шкалу, например, так:

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

ПРИМЕЧАНИЕ.что это схватит рефЭффект текущей отображаемой временной шкалы (будь то символ в режиме «Редактировать на месте», или другая сцена и т. д.). Чтобы убедиться, что он выбирает вашу «Основную временную шкалу» каждый раз, когда вы запускаете сценарий, я полагаю, что следующее захватитit:

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

ПРИМЕЧАНИЕ. Пожалуйста, исправьте вышесказанное, если я ошибаюсь!

Не совсем точно знаю, есть ли в вашем проекте TextFields в разных ключевых кадрах или они находятся в одном кадревременные шкалы, имеет смысл сканировать каждый кадр вашей временной шкалы, чтобы проверить наличие каких-либо экземпляров TextField.

Для этого важно отметить, что экземпляры или в терминологии JSFL "Элементы"не может быть получен непосредственно из объекта Timeline.Вы должны копать немного глубже, чтобы добраться туда!

По сути, вы должны пройти этот путь:

  • Текущий Timeline;
  • Это Timeline 's слоев ;
  • Каждый Layer кадров кадров ;
  • Каждый Frame объектов элементов , затем;
  • Проверьте, является ли это TextField экземпляром или нет;

Как только вы найдете эти TextFields, вам нужно будет "преобразовать" его в текстовое поле TLF.Преобразование, то есть ... создание нового текстового поля TLF, передача ему всех повторно используемых свойств классического объекта TextField, размещение текстового поля TLF в том же индексе (z-глубина), где был классический TextField, и затем его отбрасывание.При желании вы можете установить все необходимые свойства Embedded и / или TLF, необходимые для поддержки арабского шрифта.

Не вдаваясь в мелкие детали того, как выполнить этот процесс преобразования, вы можете увидеть, что просто сканируете одну временную шкалу в одиночкуэто сложная миссия.Не невозможно, но просто несколько шагов.

Если вы тщательно создадите свои собственные функции JSFL, чтобы инкапсулировать каждый необходимый шаг, чтобы его можно было повторно использовать в других необходимых проверках (другие временные шкалы, символы библиотеки и т. Д.), Вы будетезначительно снизьте сложность этой задачи!

Надеюсь, что это поможет вам (даже если это не немедленное противоядие, как в "Вот ответ, возьми это ..."!)

1 голос
/ 22 ноября 2011

Нет, нет. Конечно, вы можете создать свой собственный класс для проверки каждого кадра, а также удалять и заменять существующие TextFields во время выполнения (циклический просмотр списка отображения и выбор их с помощью if (timeline.getChildAt(i) is TextField) должен работать, хотя это, вероятно, не улучшит производительность). Но я бы посоветовал вам не делать этого. Переключитесь на текст TLF в вашем следующем проекте, когда вам не придется работать с тоннами существующего контента.

Хотя использование арабских шрифтов может стать настоящей проблемой - не только нужно поменять порядок символов, но и лигатуры (различные комбинации двух или более смежных символов «объединяются», образуя более сложный символ); почти нет способа сделать это полностью правильно, даже с текстом TLF - если вы не используете ввод TextFields, Flaraby может помочь вам создать достойную версию на основе вашего существующего классического текста. Будьте готовы, однако, - вам, возможно, придется жить с несколькими компромиссами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...