Как связать связанный актив SWC MovieClip с классом в проекте FlexBuilder Actionscript - PullRequest
1 голос
/ 27 июня 2009

Я все больше и больше использую Flex Builder и пытаюсь создать довольно сложное приложение, все в Flex Builder. Я знаю, как публиковать или экспортировать ресурсы Flash как SWC, чтобы они были доступны во Flex Builder, но что если у вас есть кнопка MovieClip с состояниями кадров во Flash, которая либо экспортируется, либо включается в SWF, опубликованный как SWC, и вы затем хотите связать файл класса, созданный в Flexbuilder, с этим активом SWC?

Я хочу избежать ненужных циклических переходов ... каждый раз, когда мне нужно отредактировать класс MovieClip, созданный во Flash, мне нужно будет отредактировать класс и повторно опубликовать или повторно экспортировать в SWC, чтобы он был доступен в Flex Builder. т.е. я хочу делать ВСЕ свое кодирование во Flexbuilder при разработке графических ресурсов во Flash.

Ответы [ 3 ]

3 голосов
/ 28 июня 2009

Есть два способа посмотреть на это. Первый способ (который я использую довольно часто) - включить FLA в мою папку lib моего проекта Flex. Затем в FLA я установил путь к ../src/ (Параметры публикации -> Вкладка Flash -> Кнопка ActionScript 3), чтобы Flash мог обращаться к тем же пакетам, что и остальная часть моего приложения Flex. Это означает, что SWC - это просто скомпилированная версия классов, которые у меня уже есть во Flex (следовательно, мне даже не нужно добавлять SWC в проект Flex технически)

Другой способ сделать что-то подобное - создать ресурсы внутри Flash и просто назначить имитируемые классы различных активов - Flash автоматически создаст для вас эти классы. Затем вы импортируете этот SWC в ваш проект Flex. Активы сами по себе, очевидно, будут просто тупыми мувиклипами, но вы можете написать свои собственные классы, которые будут создавать экземпляры активов и контролировать их.

2 голосов
/ 22 июля 2009

Я сам пытался найти хорошее решение для этого. Лучшее решение, которое я нашел, - это использование шаблона декоратора, когда вы используете один класс для украшения другого класса. Допустим, я хотел загрузить кнопку из флэш-памяти и инкапсулировать поведение при переворачивании кнопки, это может выглядеть примерно так:

public class AnimatedButton extends Sprite
{
    private var mc:MovieClip;

    public function AnimatedButton( mc:MovieClip )
    {
        this.mc = mc;

        addChild(mc);

        mc.addEventListener(MouseEvent.CLICK, onClick);
        mc.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
        mc.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
    }

    protected function onClick ( event:MouseEvent ):void
    {
        mc.gotoAndPlay("clicked");
        dispatchEvent( event) );
    }

    protected function onRollOver ( event:MouseEvent ):void
    {
        mc.gotoAndPlay("over");
        dispatchEvent( event) );
    }

    protected function onRollOut ( event:MouseEvent ):void
    {
        mc.gotoAndPlay("out");
        dispatchEvent( event );
    }
}

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

private var btn:AnimatedButton = new AnimatedButton( new FlashButton() );

это в основном создает кнопку с недавно украшенной функциональностью. Самое классное то, что теперь я могу использовать это на любой кнопке с кадрами "over", "out" и "clicked".

0 голосов
/ 29 июня 2009

Спасибо, Бранден. Одна проблема, с которой я сталкиваюсь, - это использование флэш-ресурсов, которые являются мультикадрами, например, кнопки MovieClip с метками _up, _over and_down и действием stop () в первом кадре. Использование embed удаляет любой фреймворк на основе фрейма Есть ли «лучшее» решение для этого сценария?

...