Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Связка FlashIDE + FD с компиляцией в FlashIDE (http://www.flasher.ru/forum/showthread.php?t=147884)

Alexmody 16.12.2010 15:19

Связка FlashIDE + FD с компиляцией в FlashIDE
 
Ранее был на связке FlashIDE + FD с компиляцией в FlashIDE.
Сейчас перехожу на компиляцию в FD с использованием Flex 4 SDK, а графику создаю FlashIDE и экспортирую в swc файл.

Необходимы уточнения по логике работы такой связки.
Для простого примера в FlashIDE создаю клип СCircle (с графическим кругом), линкую (галочка Export for ActionScript) его с классом СCircle.as:
Код:

package 
{
import flash.display.MovieClip;

        public class СCircle extends MovieClip
        {
                public function СCircle ()
                {
                        this.x = 500;
                }
        }
}

Т.е. при создании экземпляра класса СCircle в конструкторе устанавливается положение по оси x = 500.

Создаю в FD AS3Project, подключаю в настройках проекта Flex 4 SDK и swc файл с клипом СCircle.
В FD в Main классе прописываю addChild( new СCircle ());
Компилирую – все ок, появляется круг с положением по оси X = 500.

Вопрос: я хочу изменить в файле СCircle.as в конструкторе класса: this.x = 0; одним словом изменить as файл. Мне теперь надо заново в FlashIDE экспортнуть swc файл (в чем я сомневаюсь)? Ведь по логике именно в FD мы должны редактировать as файлы без перекомпиляции, а в FlashIDE создавать графику…

Т.е. если мы меняем графику в клипах, то без нового экспорта клипов в swc файл не обойтись, но вот если я меняю код в классах *.as с вязанных с клипами, то вероятно как-то можно обойтись без повторного экспорта swc (т.е. без повторного Publish в FlashIDE)…

Bgg 16.12.2010 15:24

Наследуйте свои классы от классов в swc
Код AS3:

package  
{
import flash.display.MovieClip;
 
        public class MyCircle extends СCircle
        {
                public function MyCircle ()
                {
                        //чо хочу, то пишу
                }
        }
}


Psycho Tiger 16.12.2010 15:56

Аха. В своё время тоже недоумевал. swc компилируется единожды, потом никто перекомпилировать его от лица FlexSDK для линковки с классом не будет.

От себя добавлю, что вот конкретно мне куда удобней не наследоваться от swc, а наследоваться от Sprite и добавить туда этот swc. В чем заключается удобство я понять не могу, однако я чувствую себя крайне дискомфортно наследуясь от графики в swc.

Alexmody 16.12.2010 15:57

Bgg
Мне необходимо изменить код класса СCircle, который уже связан с клипом СCircle.
Фактически у меня, к примеру есть клип-уровень в который во FlashIDE я перетащил несколько клипов СCircle. Далее экспортнул в swc, в FD ф-ей addChild я добавил клип-уровень в сцену (на котором располагал еще во FlashIDE несколько СCircle) для отображения. Но вдруг решил изменить/дополнить поведение класса СCircle изменив код в файле СCircle.as - мне нужно сделать так, чтобы поведение СCircle изменилось, но я заново не экспортировал swc из FlashIDE.

Psycho Tiger
"Аха. В своё время тоже недоумевал. swc компилируется единожды, потом никто перекомпилировать его от лица FlexSDK для линковки с классом не будет."
Как я понимаю, всегда линкуем клип с соответствующим классом *.as - только один раз в FlashIDE и экспортим в swc.

Загружая swc мы получаем клип СCircle и привязанным к нему СCircle.as - создаю экземпляр СCircle.as, но далее хочу чтобы его поведение было дополнено, для этого я должен дописать код в классе СCircle. Но как его дописать, если класс встроен в swc, я же не могу изменить код в swc, да и не рационально ибо изменяя графику я снова создаю новый swc файл, но получается со старой не дополненной версией класса СCircle...

TanaTiX 16.12.2010 17:14

На сколько понимаю, необходимо создать новый класс, который будет наследоваться от вашего класса в swc. В нем вы можете переопределить все методы и свойства. С другой стороны, если в swc-классах полно нестандартных методов, то не понятно зачем такая структура. Если swc создается для графики, так пусть выполняет исключительно эту функцию, а собственно код уже пишется в классах основного проекта.

Psycho Tiger 16.12.2010 17:26

Цитата:

Загружая swc мы получаем клип СCircle и привязанным к нему СCircle.as - создаю экземпляр СCircle.as, но далее хочу чтобы его поведение было дополнено, для этого я должен дописать код в классе СCircle. Но как его дописать, если класс встроен в swc, я же не могу изменить код в swc, да и не рационально ибо изменяя графику я снова создаю новый swc файл, но получается со старой не дополненной версией класса СCircle...
Верно. Изменить никак, только унаследовався.

CrazyFlasher 16.12.2010 17:27

swc это скомпилированная библиотека. Можно наследовать и переопределять там, где это возможно. Библиотеку надо делать гибкой, чтоб не было заморочек (я не имею ввиду, что ставить везде public и Object :))

Alexmody 16.12.2010 17:39

Дело в том, что FlashIDE выступает в роли граф. редактора уровней. В нем, к примеру я создаю клип CLevel, линкую его и далее перетаскиваю визуально вручную клипы-объекты наполняющие уровень (платформы, динамические элементы, враги и пр.). В данном случае СCircle, выступает одним из таких элементов наполняющих уровень, например врагом. Получается клип CLevel содержит в себе много клипов СCircle, расставленных в нужном положении (+заданы дополнитлеьные параметры).
Классы/клипы CLevel и СCircle экспортируются в swc.
Если в FD я унаследую MyCircle extends СCircle (как привел выше Bgg), то создам новый класс экземпляры которого не добавлены на уровень в класс/клип CLevel. Т.е. сейчас у нас есть клип CLevel (клип уровня игры), в котором находятся расставленные на своих местах множественные экземпляры СCircle.
Если я создам класс потомок MyCircle, то условно нужно будет удалить из клипа CLevel все экземпляры CСircle и программно поместить вместо них MyCircle (который содержит дополненный код поведения), что рушит всю концепцию визуального создания уровней в FlashIDE.
Т.е. суть в том, что у нас есть готовый уровень созданный в FlashIDE, который я импортирую в FD (посредством swc), а на уровне расставлены клипы СCircle связанной класс которого (СCircle.as) мне нужно дополнить, без создания нового файла swc.

Psycho Tiger
>>Верно. Изменить никак, только унаследовався.
В таком случае, концепция FlashIDE, как редактора уровней отпадает..., т.е. необходимо делать свой редактор уровней с сохранением в xml...а с граф. объектами из swc работать с помощью управляющих классов обверток и линковать тогда не имеет смысла.
Именно в этом посте я описал более подробно, с какой целью я создал данный топик. Возможно все же есть какие - то варианты чтобы FlashIDE был визуальным редактором уровней и я мог изменять связные классы в FD без наследования и пересоздания swc...

mikhailk 16.12.2010 17:44

Я, честно говоря, когда перешел на FD, вообще перестал какие-либо классы линковать к библиотечным объектам во FlashIDE. Не вижу выгоды, а вот проблемы, как минимум с необходимостью перекомпилировать swc из-за изменения строчки кода в прилинкованном классе налицо.

Мне лично гораздо удобнее воспринимать swc как хранилище медийных объектов (графика, анимация, звуки), а весь код иметь под рукой в FD.

Bgg 16.12.2010 18:20

Alexmody, вам уже объяснили смысл swc, динамически внутри swc ничего менять нельзя.

И идея делать редактор уровней на основе xml не так уж и плоха. Напишите отдельное приложение, которое откроет гейм-дизайнер и будет в нем составлять уровни. Как только составит по своему желанию, то нажмет кнопочку "Export XML" и вы уже получите готовый уровень в виде одного xml файла.

И вообще можно и во FlashIDE все рисовать. Создаете объект, линкуете его CLevel_1. В него добавляете графические объекты вроде стен, врагов и тд и даете им имена. Экспортируете swc, и создаете класс унаследованный от CLevel_1, в котором уже доступны те самые объекты(стены, враги и тд) Там же создаете контроллеры которые управляет стеными, врагами и тд.


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

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