Как назначить свойства MovieClip во Flash и сделать их доступными во Flex?

Ситуация / вопрос

Вот такая ситуация.

В Flash Professional у меня есть MovieClip, и у этого клипа есть дочерние элементы. Скажем, родительский клип - это ночное небо, а дочерние - это разные экземпляры звездного MovieClip, который анимируется в цикле. Все это компилируется в NightSky.swc, который я использую в Flash Builder как часть более крупного проекта.

В Flash Pro я размещаю дочерние клипы с высокой точностью. Оттуда я хочу присвоить этим «звездам» свойства. Скажем, я хочу назначить "galaxyId" и "isRedGiant", но (и это ключевой) я хочу отредактировать эти свойства в Flash Professional и сделать эти значения доступными в Flex. . Как мне это сделать?

Пример

Например, используя Flash Pro, я помещаю 6 звезд на небе, даю им галактический идентификатор «MilkyWay» и назначаю 3 из них красными гигантами. Затем я компилирую SWC и перехожу к гибкости. В Flex (Flash Builder) у меня есть некоторая логика по следующим направлениям:

public function showRedPulse():void {
    //psuedo-code just as an example:
    for each Child in the Night Sky
       if Child is in the Milky Way
           and if Child is a Red Giant
               Then, gotoAndPlay("redPulse")
}

По сути, мне нужно получить доступ к свойствам в Flex, но мне нужно установить их во Flash.

Предыдущее решение

В порядке. Я делал это в CS4 около 2 лет, но в CS5 это очень глючно. Поэтому я ищу новый подход. Раньше я создал класс ActionScript (расширяющий UIMovieClip) и добавил метатег Inspectable к полям, которые мне нужно было видеть во Flash, например:

private var _galaxyId:String;

[Inspectable(name="galaxyId", type=String, defaultValue="MilkyWay")]
public function set galaxyId(value:String):void {
     _galaxyId = value;
}

Затем, в flash professional, я бы попросил «звезду» использовать класс actionscript в качестве базового класса. Затем я бы щелкнул правой кнопкой мыши звезду в библиотеке и отредактировал определение компонента, указав его на тот же класс. Как только я это сделаю, все проверяемые свойства отобразятся в инспекторе компонентов Flash.

Резюме

Мой предыдущий подход прекрасно работал в течение многих лет. Сейчас в CS5 очень глючит, работает только иногда! Я полностью застрял, не могу двигаться дальше по своему проекту, и я подумываю полностью отказаться от Flash Pro и вместо этого попробовать Flash Catalyst.

Мне просто нужно создать объекты во Flash, которые я могу использовать в Flex (3.6, а не Flex 4). Мне нужно, чтобы у этих объектов Flash были свойства, которые я могу редактировать во Flash и получать доступ в коде Flex.

Как еще я могу подойти к этому? Это не должно быть так сложно.


person gMale    schedule 27.02.2011    source источник
comment
Flex 3.6 пока нет, а? 3.5 - это последняя версия Gold.   -  person JeffryHouser    schedule 28.02.2011
comment
Вы пробовали добавить действие кадра в кадр 1 ваших клипов MovieClips и установить там значения переменных? Вы можете опустить метатеги и просто создать простые общедоступные сеттеры и геттеры.   -  person weltraumpirat    schedule 28.02.2011
comment
@Flextras: Я очень надеюсь, что есть 3.6, мы пользуемся уже около 14 месяцев. lol (Если я правильно помню, часть нашего кода также не работает под 3.5) Последняя версия - 3.6.0.16736, и она взята из ночных сборок. Так что я предполагаю, что официальный ответ - да и нет.   -  person gMale    schedule 15.03.2011


Ответы (2)


В свойствах символа создайте новый класс для мувиклипа, а затем объявите там свое свойство. Пока вы импортируете swc, Flex будет видеть это свойство и работать с типобезопасностью.

Там не так много хорошей документации, это лучшее, что я смог найти: http://www.adobe.com/devnet/flash/articles/concept_base_class.html

person Dusty J    schedule 28.02.2011
comment
Я обнаружил, что в CS5 есть ошибка. Я попробую ваше решение, когда у меня будет возможность, в качестве возможного обходного пути ... - person gMale; 15.03.2011

Оказывается, в CS5 есть небольшая ошибка, связанная с использованием компонентов.

Flash CS5 + components as children in UIMovieClips = fail.

Тот же самый файл при сохранении в виде файла CS4 работает без изменений.

Итак, «ответ» на этот вопрос состоит в том, что предыдущее решение - правильный способ сделать это. Просто может потребоваться некоторое время, чтобы исправить эту странную ошибку в CS5. Насколько мне известно, Adobe знает об этой проблеме.

person gMale    schedule 15.03.2011