2009-03-23 3 views
1

Я пишу скрипт для доступа ко всем динамическим текстовым полям в библиотеке файла flash (fla) и встраиванию определенных наборов символов.Как получить доступ к членам группы во Flash CS3

Я повторяю все объекты, которые ищут текстовые поля, но кажется, что есть некоторые проблемы при попытке доступа к членам группового объекта. У него есть дети во флэш-файле, но я не вижу возможности получить к ним доступ из объекта Group, определенного в CS3 reference for jsfl. У группы есть недокументированный слой, и, кроме всего прочего, он содержит только ссылку на себя.

CS4 reference определяет членов для объекта Group.

Так что мои вопросы: как это сделать доступ к дочерним элементам объекта Group в API скрипта Flash C3 jsfl?

+0

Извините, я использовал форму вместо группы. Вопрос в том, как получить доступ к объекту Group :) –

ответ

1

Просто unGroup() формы сначала. Затем вы можете запустить свое нормальное «текстовое» преобразование. Это не должно повредить документу, потому что группировка не имеет реальных технических последствий.

var doc = fl.getDocumentDOM(); 
var results = fl.findObjectInDocByType("shape", doc); 
for (var i = 0; i < results.length; i++) 
{ 
    if (results[i].obj.isGroup) 
    { 
     doc.selection = [results[i].obj]; 
     doc.unGroup(); 
    } 
} 
0

Вы уверены, что работаете в фигурах? Форма не должна иметь никаких реальных детей в стороне от графики (у нее есть свойство графики, например, Sprite), которые на самом деле не считаются детьми. Они больше похожи на ценность графического свойства.

Shape не расширяет DisplayObjectContainer, поэтому я уверен, что он не может иметь дочерние объекты отображения, например, Sprite или MovieClip.

Вы должны быть безопасным, пропуская их, если ищете TextFields.

+0

Мое плохое, что должны были быть группы –

1

Объекты формы не имеют детей. Поэтому, если вы сталкиваетесь с объектом Shape в своей рекурсии, у него нет динамических текс-полей внутри него (или флеш-объектов внутри него, как дети, если на то пошло)

Что может вас смутить, так это думать, что группировка объектов на сцене делает Shape, это не так. «Группы» объектов на сцене существуют только в интерфейсе редактирования флэш-памяти для удобного редактирования и рабочего процесса. После публикации они фактически не сгруппированы в swf/actionscript.

Что может быть еще более запутанным, так это то, что когда у вас есть несколько элементов вектора на сцене или даже в некоторых ситуациях растровые объекты на сцене, Flash просто упростит их, сплюснутый к одному объекту Shape. Это облегчает иллюзию того, что группирование объектов создает объект Shape с каждым из них в качестве дочернего элемента, и поэтому объект Shape может иметь детей, но на самом деле все, что он делал, было сглажено все в одну фигуру с изображенной на ней графикой, он не содержит ни одного из них в качестве отдельных объектов. И эта ситуация никогда не бывает с динамическим текстовым полем, поэтому просто, если вы нажмете объект Shape, там нет динамического текстового поля, перейдите на :)

0

Вы уже намекнули на ответ сами: используйте членов на объектах формы. Он возвращает массив объектов, содержащийся внутри, который может быть или не быть текстовыми объектами.

Вы не указали, используете ли вы fl.findObjectInDocByType() для сканирования документа для текстовых объектов и формы (потенциальные группы), но это было бы неплохой идеей.

http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00004151.html

Я считаю, что следующий сценарий будет отслеживать текстовое значение всех динамических текстовых полей в FLA, если нет какого-то неприятный вложенного случая, что я пропустил. В любом случае, мы надеемся, что вы пойдете. Будьте осторожны, вам нужно запустить сценарий из меню «Команды», чтобы fl.findObjectInDocByType() не выдавал ошибку. См. Комментарии по ссылке выше для получения дополнительной информации.

// Look for text objects 
var doc = fl.getDocumentDOM(); 
var typeToSearchFor = "text"; 
var results = fl.findObjectInDocByType(typeToSearchFor, doc); 

for(var i = 0; i < results.length; i++) 
{ 
    if(results[i].obj.textType == "dynamic") 
    { 
     doWhatever(results[i].obj); 
    } 
} 

// Look for shapes 
typeToSearchFor = "shape"; 
results = fl.findObjectInDocByType(typeToSearchFor, doc); 

var textObjects; 

for(var i = 0; i < results.length; i++) 
{ 
    var members = results[i].obj.members; 

    for(var j = 0; j < members.length; j++) 
    { 
     if(members[j].elementType == "text" && members[j].textType == "dynamic") 
     { 
      doWhatever(members[j]); 
     } 
    } 
} 


function doWhatever(textObj) 
{ 
    fl.trace(textObj.getTextString()); 
} 
+0

Спасибо Stiggler, что метод findObjectInDocByType() будет удобным дополнением к моему набору инструментов :) Но этот код попадает в ту же проблему, что и я have, я использую CS3, но класс Shape получил свойство «members» в CS4. –

+0

О, я совершенно неправильно понял проблему! К счастью, решение легко - просто выложите некоторые $$$ для обновления :) – Stiggler

Смежные вопросы