Как получить доступ к участникам группы во Flash CS3

StackOverflow https://stackoverflow.com/questions/674389

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

В Ссылка на CS4 определяет Участники свойство для группового объекта.

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

Это было полезно?

Решение

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

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();
    }
}

Другие советы

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

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

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

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

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

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

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

Вы не указали, используете ли вы 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());
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top