Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > КорДум

Рейтинг: 5.00. Голосов: 4.

Приятное программирование: SWC + FlashDevelop

Запись от КорДум размещена 14.12.2010 в 19:26
Обновил(-а) КорДум 16.12.2010 в 11:52

Когда сидишь каждый день на форуме и заглядываешь в почти каждую тему, невольно подмечаешь частоту тех или иных вопросов от новичков. И, хоть в интернете полно подобных статей, человек, создающий такую тему, либо не может понять, что там написано, либо не хочет понять, либо не хочет искать. А может, и все это вместе.

Когда начинаешь с FlashIDE под руководством хороших и качественных уроков и книг, постепенно понимаешь, что FlashIDE - жутко неудобная среда для написания кода. А уже потом, начитавшись всякого и столкнувшись с теми или иными багами компилятора, приходишь к выводу, что FlashIDE хорош только для графики и ручной анимации. И хочется чего-то другого, побольше удобства, поменьше глюков. Выбор падает на FlashBuilder или на FlashDevelop. Есть и другие, но я их опущу.

Речь сейчас пойдет об одном из способов облегчить себе процесс кодирования и эффективно использовать FlashIDE и FlashDevelop. Конечно, данная статья – мое субъективное мнение и мой личный опыт. Я даже в глаза не видел, как выглядит FlashBuilder, понаслышке знаю о MXML и прочих флексовых прелестях, поэтому мой выбор – FlashDevelop.

Традиционные действия во FlashIDE сводятся к тому, чтобы понаделать клипов, дать им более-менее вменяемые имена, понасоздавать рядом с fla кучу as-файлов и описывать действия программы во внутреннем редакторе FlashIDE. И, может быть, оно сначала и круто – это тот же блокнот со слабой поддержкой подсветки и автокомплита с хинтами. Но потом надоедает каждый раз вручную писать большую строчку типа:
Код AS3:
myClip.addEventListener(Event.ENTER_FRAME, myOnEnterFrame);
И спасибо, что хотя бы ENTER_FRAME можно выбрать в появившейся подсказке. Да, это способствует запоминанию тех или иных вещей, но, согласитесь, надоедает. И вот мы в поисках бродим по интернету и смотрим, какие там у нас редакторы кода народ жалует. И, как правило, в поиске попадается либо FD, либо FB. Но, так как автор этой статьи субъективист еще тот, равно как и эгоист по совместительству, он выбирает FD, качает с официального форума последний дистрибутив, а к нему еще и FlexSDK в придачу, пока не зная, зачем он нужен. Или зная, но не особо понимая, куда его приспособить. А все потому, что новичок сначала пытается компилировать все в том же FlashIDE. Ну, немного забежал вперед предыдущим предложением… Так вот, при установке следует поставить standalone режим, дабы потом расширить свой стиль своими шаблонами для классов. И что мы делаем первым делом? Создаем проект для FlashIDE, но пишем код уже в FD, а в FlashIDE только компилируем и храним библиотеку. Прогресс налицо. А удобно, удобно-то как!

Удобно, пока не натыкаемся на какой-нибудь баг компилятора. Ну, мало ли, всякое бывает. После вырванных волос и перечитанных книжек-уроков, где все работает, а у нас - нет, прикручиваем FlexSDK к FD, создаем проект на чистом as3 и начинаем думать, как сделать так, чтобы компилятор брал графику. И вообще, откуда он должен догадаться, что такое вообще нужно сделать? Выхода два: можно вшить swf, скомпилированный в FlashIDE, но можно поступить элегантнее, на мой взгляд – swc. Что же это такое и зачем оно? А это, по сути, архив с нашей графикой, с нашими клипами. А всего-то нужно нарисовать нужные клипы или добавить картинки/звуки в библиотеку, дать им нормальные имена (я практикую суффиксы, типа ClassMC или ClassBitmap). После чего нужно зайти в настройки экспорта и поставить галочку напротив Export SWC:
Название: Bilderman 2010.12.14 16-32-21.png
Просмотров: 2237

Размер: 28.1 Кб
А затем просто скомпилировать флешку. На выходе возле fla-файла (ну или где там настроена публикация) будет лежать наш swc. Вот этот swc мы берем и переносим в папку lib проекта FD. Но и это еще не все. Нужно же как-то подключить библиотеку, а то мы просто положили в папочку и ждем чуда. Идем в наш проект в FD, ищем на панели Project наш swc, в контекстном меню выбираем AddToLibrary. Собственно, все. Классы там пустые, если хотим заставить какой-то клип прыгать на одной ноге на сцене, можно расширить класс у этого клипа своим (именно поэтому я делаю суффиксы именам классов, чтобы потом использовать такое же название, но уже без суффикса, у класса-поведения). Графика наследуется, поведение напишется.
Вуаля!

Приложение к статье
Размещено в FlashDevelop
Комментарии 27 Отправить другу ссылку на эту запись
Всего комментариев 27

Комментарии

Старый 14.12.2010 22:47 dimarik вне форума
dimarik
 
Аватар для dimarik
Название темы не отражает сути вопроса. =) Спасибо, можно будет сослаться, если что.
Старый 14.12.2010 23:29 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Замечательная статья.
Хотелось бы только ещё инструкцию, как пошагово прикрутить флекссдк в фд.
Старый 14.12.2010 23:40 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Насчет суффиксов. Я обычно пишу имена классов по типу "lib.windows.SomeWindow" - и сразу понимаю, что если пакет lib, - то это класс из swc.
Еще один момент. Зачастую удобно что-то собрать в библиотеке (то же окошко, например - в нем есть кнопки закрыть, свернуть, еще какие-то), а потом всем элементам прописать имена. Затем в FlashDevelop создаем класс и наследуем его от библиотечного класса с графикой. И вот тут есть 2 способа обратиться к нарисованной кнопке "закрыть"
Код AS3:
// closeButton - это имя экземпляра
// прописанное в его свойствах во Flash IDE
 
// 1 способ
var button:DisplayObject = super.getChildByName("closeButton")
 
// 2 способ
var button:DisplayObject = super.closeButton
Мне лично проще пользоваться вторым способом. Чтобы все работало правильно, необходимо зайти в параметры публикации (Publish settings), выбрать вкладку flash, далее нажать на кнопочку settings рядом с версией Actionscript'а и поставить галочку "Automatically declare stage instances". После этого все, ччему мы прописали имя экземпляра в свойствах, будет доступно как свойство нашего класса

Цитата:
как пошагово прикрутить флекссдк в фд.
Поставить галочку "install flex sdk" при установке FD =) Или он не прикручивается? (проверять лень)
Старый 14.12.2010 23:44 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Ах, да. Это новые фичи фд, я о них забыл. Про прикручивание тоже невкурсе.
Наверное, всё таки InteractiveObject. Толку от closeButton иначе нет никакого.
Старый 15.12.2010 00:25 samana вне форума
samana
 
Аватар для samana
КорДум
Приятная информация! Спасибо, обязательно попробую.

gloomyBrain
Спасибо за подсказку!
Старый 15.12.2010 00:30 iNils вне форума
iNils
 
Аватар для iNils
Пока статью толком не читал, но у меня вопросы по оформлению.
1. Что заставляет выкладывать изображение на сторонних ресурсах, а не на самом форуме, прям в статье?
2. Опять не фига не понятно о чем будет идти речь, пока не прочтешь пару абзацев. А вдруг оно мне не надо? Как это понять?
Обновил(-а) iNils 15.12.2010 в 00:33
Старый 15.12.2010 00:32 КорДум вне форума
КорДум
 
Аватар для КорДум
О, таки дебют удался и помидоров не ждать? (:

dimarik, отчасти раскрывает)

Psycho Tiger, а это уже другая история)

gloomyBrain, во, новое почерпнул для себя. А то, блин, у меня скроллбар собирается из девяти частей (две кнопки, слайдер, у всего по три стейта), ну и сверху в классе аж девять импортов. Эстетически некрасиво. А тут даже очень симпатично, спасибо, будем юзать!
И да, я тут подумал, а ведь можно так скармливать скроллбару всего лишь один мувиклип skin, главное, чтобы правильно были названиы запчасти там. Штатные скроллбары так же сделаны, как я сейчас описал?

iNils, обычная недогада, сейчас сделаю. Спасибо.
Старый 15.12.2010 01:21 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
главное, чтобы правильно были названиы запчасти там
Правильнее будет написать интерфейс IScrollBarSkin, в котором будут перечислены геттеры для всех необходимых свойств. И потом этот интерфейс имплементить в каждом скине. Тогда можно будет отдавать скин через IScrollBarSkin и не париться - фактически скины могут идти по разным веткам наследования, если это необходимо
Старый 15.12.2010 01:38 КорДум вне форума
КорДум
 
Аватар для КорДум
Я подумал об этом же, удобно.
Старый 15.12.2010 04:05 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
А как поступить в случае, если есть готовый дизайн, все очень ветвистое, все очень сильно вложено одно в другое? Ну и естественно у каждого (почти) вложенного элемента должен быть свой класс, которому соответствует некое изображение или анимация. Как тогда правильно и красиво организовать свой проект? Не разносить же все объекты, которым назначены классы по отдельным закуточкам и не добавлять программно?
Старый 15.12.2010 10:07 КорДум вне форума
КорДум
 
Аватар для КорДум
TanaTiX, а почему бы не сделать все программно? Если поздно спохватились, когда уже все пораспихали во вложенности, то да, муторно потом все исправлять. Но если есть готовые элементы, все по отдельности, то проще такой конструктор собирать по частям программно - лишняя головная боль не посетит. Ведь кодом-то все нагляднее. Кроме того, getChildByName еще никто не отменял, плюс gloomyBrain сказал, как можно автоматически сделать детей свойства класса родителя.
Я всегда добавляю все программно, делаю даже отдельные классы для этого - интерфейсные, они добавляют всю графику, позиционируют.
Старый 15.12.2010 10:16 Bgg вне форума
Bgg
 
Аватар для Bgg
Зачем все программно? Что за крайности? Должна быть золотая середина.
Различного рода вложенности нужно просто группировать, и по необходимости эти группы линковать с классом.
Старый 15.12.2010 11:02 udaaff вне форума
udaaff
Цитата:
Сообщение от gloomyBrain
Мне лично проще пользоваться вторым способом. Чтобы все работало правильно, необходимо зайти в параметры публикации (Publish settings), выбрать вкладку flash, далее нажать на кнопочку settings рядом с версией Actionscript'а и поставить галочку "Automatically declare stage instances". После этого все, ччему мы прописали имя экземпляра в свойствах, будет доступно как свойство нашего класса
А не лучше снять галку и объявить переменные в классе?
Старый 15.12.2010 11:16 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
А чем это лучше?
Старый 15.12.2010 11:20 udaaff вне форума
udaaff
Ну а как удобнее обращаться к свойству объекта?
this["someProperty"] или this.someProperty?

upd:
И в самом классе показать какие у него есть переменные, а не держать это в уме или еще где.
Обновил(-а) udaaff 15.12.2010 в 11:22
Старый 15.12.2010 11:23 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Мне - вторым способом. И при установленной галочке он становится возможным. Без нее, по идее, так не получится.
Старый 15.12.2010 11:28 udaaff вне форума
udaaff
Под this["someProperty"] я подразумевал super.getChildByName("closeButton").

Или при получении доступа к дитенку через getChildByName() есть какой-то плюс?
Старый 15.12.2010 11:37 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Установка этой галочки (мы вообще про одно и то же говорим?) все экземпляры, которым прописано имя, объявляет свойствами класса. Таким образом, необходимость в getChildByName() пропадает. У Вас это не так, или Вы не пробовали?
Старый 15.12.2010 11:45 udaaff вне форума
udaaff
Объявляет неявно, а я говорю про то, что лучше объявить их в явном виде в классе =) Сорри, если ввел в заблуждение =)
Старый 15.12.2010 14:08 КорДум вне форума
КорДум
 
Аватар для КорДум
Цитата:
Зачем все программно? Что за крайности? Должна быть золотая середина.
Привык, да и на работе требуют. Мелочевку можно и оставлять в контейнере, а что-то серьезное с многоглубинной вложенностью, по мне, лучше делать программно. Хотя, конечно же, все зависит от ситуации и энтузиазма/лени.
Старый 15.12.2010 16:07 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Я знаю об этой галке, она у меня стоит где попало. Всю графику собираю через getChildByName, в случае если дизайн готов. Программно, если он отрисовывается "при мне".
Старый 16.12.2010 18:40 fljot вне форума
fljot
Опять советы расширять кастомные классы от графики.. что, все так делают??
Старый 16.12.2010 19:07 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Нет. Я композицией делаю - внутри моего класса создаю экземпляр графики и добавляю в себя.
Старый 16.12.2010 19:31 fljot вне форума
fljot
Старый 16.12.2010 21:32 КорДум вне форума
КорДум
 
Аватар для КорДум
Цитата:
Опять советы расширять кастомные классы от графики.. что, все так делают??
Можно добавлять в классе, как Тигер делает. Мне приятнее расширять, многим, думаю, тоже.
Старый 18.12.2010 10:25 zuxul вне форума
zuxul
"Метод Тигер-а", которым пользуемся и мы, позволяет не загружать лишнюю графику, то есть, подгружать графику только по требованию, но тут нужен уже *.swc, а *.swf
Старый 18.12.2010 13:08 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Не всегда графика должна загружаться "по требованию". Некоторая графика должна быть сразу вшита в клиент.
 

 


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


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