Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   FlashDevelop и SWC. Поделитесь опытом. (http://www.flasher.ru/forum/showthread.php?t=120807)

Mur4ik 31.01.2009 06:36

FlashDevelop и SWC. Поделитесь опытом.
 
Как бы так научиться обходиться без компиляции во Flash IDE?

Сейчас делаю в основном сайты и приложения напичканные графикой.
Знаю что можно как то эту всю графику запихнуть в SWC и потом во FlashDevelope использовать символы из библиотеки в коде.
Но расставлять придется все элементы интерфейса и всего остального программно и наугад (или записав координаты элементов предварительно на бумажку) при таком подходе?

Еще где-то проскакивала инфа про направляющие слои для дизайна во fla файле (типа для более удобного позиционирования элементов), только не понял тогда какое отношение это к SWC имеет, а сейчас не могу найти источник чтоб вникнуть еще раз.

И возможно ли расставить элементы во Flash IDE (хотябы для главной страницы) и потом уже экспортировать для дальнейшего управления кодом?

Поделитесь, пожалуйста, опытом. Кто как делает? С привязкой к AS3.
И если можно по подробнее.

darksranger 31.01.2009 07:13

принцип такой ( чтобы запихнуть в swc, для начала нада установить спец компонент, для flash ide, через Adobe Extension Manager )
в flash ide создаем символ, например Main, далее создаем еще один, к примеру Container и в Container закидываем и раставляем как нада, далее кидаем на сцену ( хотя это не принципиально ) Main и в него суем Container ( это принципиально ) ,далее в linkaje символа !!!Main!!! задаем имя как всегда и экспортируем в swc, далее уже в проэкте создаем экзэмпляр Main'a и получаем раставленные обьекты в нужном порядке

а теперь вопрос косвенный ,но не менее важный для меня
как сделать компиляцию swc в flashDevolop ?, а то запускать два приложения и компилировать сначала swc, а потом весь проэкт, уже изрядно поднадоело, хочется чтобы все собралось за рас, если конечно такое реально

Mur4ik 31.01.2009 07:55

Спасибо за ответ.
Вот только не понял что за плагин такой хитрый нужен к Flash IDE?

Собственно по Вашему вопросу есть плагин
Но не уверен что он работает с RC1, а может уже и персобрали (или скоро по любому сделают)


А на что влияет галочка "Automatically declare stage instances" в настройках экспорта as3?

darksranger 31.01.2009 10:21

ой наверно я перепутал с компиляцией под flex :) заработался :)
изначально же есть функция export swc ?

спасибо за ответ, попробую на досуге :)

Alex Lexcuk 31.01.2009 10:24

А зачем SWC ведь можно в проект флеш девелоп да и просто mxmlc
засунуть скомпиленную флешку swf вместе с классами, если они нужны

Вот ссылка, я по ней пробовал.
http://blog.pirrest.com/2008/03/21/74/

Там надо отловить у Loader событие Complete, а не
отлавливать первый кадр.

darksranger 31.01.2009 11:04

ну незнаю, мне проще с swc ... уже как то привык только не удобно что swc делаю в Flash IDE

Добавлено через 6 минут
насчет плагина к FD
1 он у меня exeption шлет, да и лана дело не в нем ,а вот в этой строчке
Load an AS3 project
тоесть получается мне нужно опять токи, сделать анлоад текущего проэкта, либо открыть второе окно и всеравно получится компиляция в два присеста ...

marat_sa 31.01.2009 11:34

Непонятен еще такой аспект:
1) Вот сделали мы во fla файле главный клип SomeContainer, в свойствах прописали ему свой класс SomeContainer.
2) Положили внуть него, допустим, компонент TextArea.
3) В настройках отключили галочку - Automaticaly declare stage instances
4) В классе SomeContainer объявили член класса - public var ta:TextArea;
5) В конcтрукторе выставили нужные св-ва у ta.
6) Скомпилировали SWC, подключили во FD.
Теперь во FD нашли нашу переменную SomeContainer,
сделали var cont:SomeContainer = new SomeContainer();
addChild(cont);
получаем ошибку, что типа объект равен null при выполнении пункта 5, ну и на сцене ничего собственно нет.
Код:

Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".Fault, init() at SomeContainer
По-моему, FD тянет не символ из SWC, а ассоциированный с ним класс.

wvxvw 31.01.2009 14:04

Цитата:

Сообщение от Mur4ik (Сообщение 794655)
Как бы так научиться обходиться без компиляции во Flash IDE?

Сейчас делаю в основном сайты и приложения напичканные графикой.
Знаю что можно как то эту всю графику запихнуть в SWC и потом во FlashDevelope использовать символы из библиотеки в коде.
Но расставлять придется все элементы интерфейса и всего остального программно и наугад (или записав координаты элементов предварительно на бумажку) при таком подходе?

Еще где-то проскакивала инфа про направляющие слои для дизайна во fla файле (типа для более удобного позиционирования элементов), только не понял тогда какое отношение это к SWC имеет, а сейчас не могу найти источник чтоб вникнуть еще раз.

И возможно ли расставить элементы во Flash IDE (хотябы для главной страницы) и потом уже экспортировать для дальнейшего управления кодом?

Поделитесь, пожалуйста, опытом. Кто как делает? С привязкой к AS3.
И если можно по подробнее.

Я делаю свои MXML компоненты и скиню их с помощью классов из SWC полученного из Флеша (MXML совсем не объязательно использовать в комплекте с фреймворком)... Как на мой вкус, пихать в флешевые классы еще и флешевые компоненты - ну, я бы не стал так делать... можно, но, как по мне очень неудобно. Т.е. во Флеше только графику / анимацию и т.п. Компоненты типа текстерии - либо Флексовые, либо самому делать... флешевые какие-то ни два ни полтора. В смысле они очень тяжелые - флешка все равно тяжелая получится, ну и по сравнению с флексовыми они какие-то недоделанные...
Но, опять же, дело привычки. Мне не в напряг пару лишних раз перекомилировать, чтобы поставить компонент в нужное место.

По поводу SWC - осторожно с RC1-RC2 (FlashDevelop 3 release build) желательно ставьте девятую бету, пока что... в последних билдах SWC можно было подключить только вручную вписав их в файл проекта, а при добавлении их в проект через GUI будут ошибки. Но хочется верить, что пофиксят это дело скоро...

darksranger 31.01.2009 14:51

незнаю рационален ли мой подход
я делаю swc в flash, ( понеобходимости привязываю им классы ) далее в основном проэкте в FD, в library добавляю ( addLibrary ) и уже управляю ими как мне нужно ,
компоненты у меня на уровне обратной формы ( тоесть в компоненте есть класс который все делает ), а из основного проэкта я уже не заботясь о мелочах, просто создаю передавая нужные аргументы ( язык например )

конечно это не верх айсберга, просто как пример ( только что делал компонент и в пример привел)) )
единственно напрягает, компилировать вначале компонент ,а потом проэкт ( когда всю ночь не спал, забываешь их нафиг компилировать и очень долго начинаешь в тыкать, почему только что внесенные изменения не работают :D )

Mur4ik 31.01.2009 18:48

2 darksranger:
А обязательно ли обворачивать все двумя клипами Main и Container?
Возможно ли обернуть в один, скажем Main и кинуть его на сцену и откомпилить,
так получится получить все элементы на своих местах?

2 wvxvw:
Я не совсем про компоненты, я про графику и позиционирование элементов.
Т.е как максимально упростить процесс размещения элементов дизайна (а их часто немало) на сцене?

Ну вот допустим есть сайт на 4 раздела.
4 кадра (или более для анимации переходов между разделами) с метками по названиям разделов. Если всю эту структуру оберну мувиклипом и сделаю експорт в SWC доступны мне будут названия меток для переходов программно, доступны ли отдельные символы которые я на кидаю на сцену и те символы которые внутри этих символов?
Или в мувиклипах в которых анимация тоже есть метки и stop()'ы...

Вообщем вопросов куча :), я, конечно, сейчас сам начну экспериментировать и пробовать что там к чему. Просто хотелось бы услышать/увидеть/прочитать накопленный опыт людей кто это уже делал/ет.

Еще есть что то типа инъекций кода в swf, это не то, да? :)

И все же - за что отвечает галочка "Automatically declare stage instances"?
И как с ней быть при експорте в SWC?

silin 01.02.2009 11:26

Вложений: 1
возможно кому пригодится такой расклад (меня пока полностью устраивает):
IDE при компиляции "не видит" классов проекта, т.е. ей в качестве Source path указываем на "левую" папку
в этой папке и храним классы, описывающие свойства/логику объектов, которые попадут в SWC

FD-шный же проект в свою очередь не видит этой папки и тянет уже скомпиленные классы их SWC
если классы IDE-шных объектов должны взаимодействовать с классами основного проекта, то сложнее, но тоже есть варианты, хотя это неверный подход изначально и лучше его избегать

в аттаче вариант для примера marat_sa

ps. у меня вся эта структура изначально забита в дефолтовый AS3-шный темплет, чтоб не заморачиваться всякий раз созданием

marat_sa 01.02.2009 16:14

2 silin
Спасибо, я тоже пришел к выводу (после проб и ошибок), что классы мы прописываем и привязываем для SWC, а SWC, в свою очередь привязываем к пректу. Получаем класс с ассоциированным с ним элементом библиотеки (при компиляции без входного swf-файла у нас и библиотеки-то нет).
Просто испугался, думал я что-то не так делал))

Mur4ik 01.02.2009 21:22

Спасибо всем за советы.

На все вопросы в предыдущем своем посте я получил утвердительные ответы путем экспериментов.

Вообщем моя схема примерно такая:

1. Создаем пустой мувиклип и задаем ему Linkage name (например mcMain_background)
2. Размещаем все необходимые элементы соответсвенно дизану в этом клипе и прописываем им instance name. Можно настроить и анимацию переходов между кадрами/разделами, вообщем любая привычная схема по таймлайну пройдет.
2.1 Таки образом можно собрать все необходимые елементы интерфейса и потом добавлять их на сцену программно по необходимости.
3. Размещаем этот мувик на сцене как Guide Layer, для удобного редактирования Вам или дизайнеру (в кончный swf и SWC он не попадет)
4. Подключаем Document Class к флешке
5. В настройках экспорта галочку на Export SWC.
6. Снимаем галочку с "Automatically declare stage instances".

В FlashDevelop правой кнопкой на SWC и "Add To Library"
Теперь у нас доступны все мувиклипы с Linkage ID, и автокомплит для клипов с instance name (внутри главного клипа в том числе).

И проект компилируется и в Flash IDE и в FlashDevelop (т.к не все знают о существовании и основ работы с FlashDevelop), это хорошая альтернатива и универсальность.


Вообщем всем спасибо. Пока все вопросы по этой теме у меня отпали.

marat_sa 02.02.2009 09:13

Во Flash CS4 в настройках проекта появилась возможность подключать внешние SWC-файлы и работать с ними как с внешними библиотеками.
То есть это как бы как в механизм AuthorSharingLibrary?
Мы можем, допустим, в нашем проекте сделать кнопку в button.SWC файле, а потом при создании нескольких игровых экранов, везде подключить button.SWC с кнопкой. Т.е. фактически кнопка у нас будет одна, а при публикации основного SWF файла она подтянется во все наши SWC из своего исходного файла button.SWC, без дублирования символа и без каких-либо осложнений.

Подскажите, как настроить подключение внешних SWC во Flash CS4? Там вкладки:
SourcePath, Library Path, External Library Path, Config Constans, что куда прописать?

BlooDHounD 02.02.2009 11:12

можно со словарём посидеть минутку... вдруг на идеи на всякие натолкнёт...

fljot 02.02.2009 12:39

silin, Mur4ik, marat_sa,

я ничего не упускаю? почти при каждом изменении кода вы компилируете аж два раза? один раз во Flash IDE для создания swc, потом флексовым компилятором из-под FD?

если так - зачем?? это же 1) неудобно. по два раза, в разных местах. 2) какой толк от компиляции mxmlc'ом? выйгрыша скорости нет. и как там подебажить, если пол-проекта уже скомпилировано

marat_sa 02.02.2009 13:05

2 BlooDHounD, я прописывал пути в проекте и до папки с SWC и файлы сами указывал, но почему-то в проекте они не появлялись, reload делал в панели components... Ничего не получилось((( Просто хотел спросить, как правильно? Может я чего не то делаю?

2 fljot, а как еще можно? В IDE рисуется, собственно, вся графика, ассоциируется с соответствующим классом, компилиться в SWC. Потом уже, в основном проекте, подцепляем полученную SWС и юзаем ее классы. Может можно проще? Подскажите :-)

silin 02.02.2009 13:31

fljot, если меняется IDE-шная часть, то конечно перекомпилять ее надо, но меняется она редко, если основная разработка в FD..
насчет выигрыша в скорости ты заблуждаешься - есть и приличный (плюс не приходится перекомпилировать уже скомпиленную часть)

fljot 02.02.2009 13:36

marat_sa,

я во Flash IDE компилирую графику. абсолютно без кода. и потом пользуюсь дериктивой Embed

скажем, есть у нас какой-то контейнер хедер. в нём несколько нарисованных кнопок. во Flash IDE делаем клип Header, выставляем ему linkage Header. в нём несколько кнопок(скажем, с одинаковым функционалом) c линкеджами Section1Button, Section2Button... и instance names btn1, btn2... компилируем swf один раз, больше не нужно. закрываем Flash IDE нафик)

далее примерно следующее:
Код AS3:

[Embed(source="assets/lib.swf#Header")]
public class Header extends Sprite
{
    //нужно явно объявить классы кнопок, чтобы компилятор их подхватил
    public var btn1:Section1Button;
    public var btn2:Section2Button;
 
    public function Header()
    {
        super();
    }
 
    // любая логика
}
 
 
 
[Embed(source="assets/lib.swf#Section1Button")]
public class Section1Button extends AbstractButton
{
    public function Section1Button()
    {
        super();
    }
}
 
[Embed(source="assets/lib.swf#Section2Button")]
public class Section2Button extends AbstractButton
{
    public function Section1Button()
    {
        super();
    }
}
 
 
public class AbstractButton extends Sprite
{
//здесь любая логика. кнопки, расширяющие этот класс унаследуют логику и будут иметь свой вид... аналогия указывания BaseClass в Flash IDE
}




silin,

про выйгрыш я имел ввиду при компиляции в двух местах.

darksranger 02.02.2009 14:21

marat_sa
эм насколько мне известно swc для этого и делаются что бы один компонент можно было импортировать а создать уже в разных местах не ограниченным количество
или я щас не об этом ?

что касается fljot, ну если вы не можете в FD ,отдебажить то это не говрит что у всех так, ... есть Alcon, есть еще куча всего, ... у меня все дебажится и работает на ура, единственно парит конечно перекомпилировать swc ,в flash IDE но это мелочи по сравнению с редактором кода в flash IDE ... да и кстате FD компилирует то, только измененую область ... так что не понятна ваша мысль про медленее ...

marat_sa 02.02.2009 15:00

darksranger
Ну в принципе да, но при использовании варианта, предложенного fljot, потребность в них вроде отпадает, если дергать только графику...

Попробовал подключить всю графику через метатэг Embed. Во FlashDevelop всё прекрасно заработало. А вот FDT под Eclipse ругается(((
Вобщем в SWF файле Tree.swf в бибиотеке лежит клипа treePart1 с linkage TreePart1, baseClass - Sprite.
В главном классе делаю:
Код AS3:

[Embed(source='../lib/Tree.swf', symbol='TreePart1')]
public var TreePart1:Class;
...
var treePart:Sprite;
treePart = new TreePart1();
addChild(treePart);

А он мне выдаёт:
Код:

Tree_TreePart1.as(11): col: 45 Error: Определение базового класса SpriteAsset не найдено.
public class Tree_TreePart1 extends mx.core.SpriteAsset


fljot 02.02.2009 15:17

marat_sa,

я под FDT.
во-перых, вы не описались где-нибудь с линкеджми? тут вы написали treePart1 и TreePart1.. потом, BaseClass оставьте впокое. пусть там по-умолчанию будет мувиклип.
и приведите побольше кода, а то не очень ясно

Добавлено через -15 секунд
marat_sa,

я под FDT.
во-перых, вы не описались где-нибудь с линкеджми? тут вы написали treePart1 и TreePart1.. потом, BaseClass оставьте впокое. пусть там по-умолчанию будет мувиклип.
и приведите побольше кода, а то не очень ясно

marat_sa 02.02.2009 15:44

В общем FDT AS3 проект:
В корне в папке src лежат 2 класса Main и Tree.
В корне в папке lib имеется Tree.swf. В котором в библиотеке лежит вышеописанный символ с linkage TreePart1.

Main.as:
Код AS3:

package 
{
        import flash.display.Sprite;
        public class Main extends Sprite
        {
                private var tree:Tree;
                public function Main():void {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
                private function init(e:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        tree = new Tree();
                        addChild(tree);
                }
        }
}

Tree.as:
Код AS3:

package  
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        [Embed(source='../lib/Tree.swf', symbol='Tree')]
        public class Tree extends Sprite
        {
                //в нем лежит на сцене символ
                public var head:Sprite;
                public var trunk:Sprite;
 
                [Embed(source='../lib/Tree.swf', symbol='TreePart1')]
                public var TreePart1:Class;
 
                public function Tree() {
                        treePart = new TreePart1();
                        addChild(treePart);
                }
        }
}


fljot 02.02.2009 16:54

для начала
Код AS3:

treePart = new TreePart1();

treePart то надо объявить где-нибудь..или свойство, или локальная переменная. потом тип её указать бы и приведение типа сделать

потом символ Tree существует?

после этих фиксов уже можно дальше будет смотреть

wvxvw 03.02.2009 00:26

addChild(treePart);
Если TreePart1 существует, и до него можно добраться, то treePart надо привести к DisplayObject, ну, или, как минимум к базовому класу класса treePart1.
А вообще, зачем символ и класс одинаково называть? Потом путаница будет... и, даж не знаю, компайлеру тоже может не понравится...

marat_sa 03.02.2009 08:53

Вложений: 1
Я уже не знаю, что этому FDT не нравиться(((
Вобщем вот пример, там в папке bin рабочая версия из FD и нерабочая Main.swf от FDT.

Там дерево - Tree за голову тянешь - появляются new TreePart1();

2 wvxvw
А как лучше и правильнее называть класс элемента и linkage его графического элемента? Просто я не юзал данную технику))

fljot 03.02.2009 11:24

marat_sa,
в FDT без проблем скомпилировалось и работает. попробуйте сделать project -> clean может.. мож чего в кеше, потому что у меня всё ок

marat_sa 03.02.2009 11:33

Всё, разобрался. Core Library стояла CS3, выставил Flex3 либы - заработало.
O_o
Классы что ли ущербные у playerglobal.swc стандартного...
Вобщем, fljot и всем спасибо за помощь)))

Код в кадрах для управления воспроизведением MovieClip'oв не работает чтоли? Как быть?

wvxvw 03.02.2009 12:55

>> Код в кадрах для управления воспроизведением MovieClip'oв не работает чтоли? Как быть?
Если так уж нужен код в кадрах... =/ Создаем свой класс, который прилинковываем к символу, который собираемся использовать, в классе через addFrameScript(func, frame) добавляем какую-то из функций к нужному кадру и используем этот класс из SWC.


Часовой пояс GMT +4, время: 04:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.