![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Aug 2007
Сообщений: 168
|
Здравствуйте.
Уже 4 месяца разрабатываю проект, и пришел к выводу к данному моменту он слишком много стал весить и слишком долго компилироваться, поэтому возникла идея разделить его на модули. Поинтересовавшись как это можно сделать попробовал: вынес один из классов в отдельный FLA, вместе со связанными символами в библиотеке, сделал загрузчик, который получает определение класса из applicationDomain загружаемого модуля, и очень обрадовался когда обраружил что во первых все работает, а во вторых модуль очень быстро компилируеться. Думал "ух, наконецто не нужно будет компилировать проект целиком, как скорость разработки то увеличиться" (проект целиком копилируеться около 2х минут, и на это уходит больше часа в день), но внеся изменения в код, обнаружил, что изменеия при компиляции только модуля, без основного исходника, совершенно не происходят. Сначала не понимал в чем дело, но потом просмотрев код понял - судя по всему это из-за того, что в самом проекте я использую статические переменные класса, который ассоциирован с основным клипом модуля, думал что эта проблема решиться если ображаться к статическим переменным через ту, которой я присваиваю определение класса, но в этом случае при вызове модуля вылезает ошибка "невозможно вызвать объект со ссылко на null", и так везде где происходит обращение к статическим переменным. Что я собственно хочу узнать, так это есть ли способ обращаться к статическим переменным класса, определение которого получено при окончинии загрузки, методом getDifinition. И если можно то как? |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Вынужден вас огорчить, если вы используете в обоих модулях один и тот же класс, то его изменение требует перекомпиляции обоих модулей, иначе результаты будут мягко говоря неадекватными. лучший способ использовать интерфейсы для обмена "тычками" между модулями. По идее если у вас есть статический метод(переменная, константа) как только он инициирован в текущем приложении то последующая загрузка любого элемента приводит к тому, что он будет использовать уже существующую ссылку.
Кстати просвятите что значит Цитата:
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 168
|
Код привести уже не могу, откатил исходники в svn до рабочего состояния, ошибки вылетали такие:
Кстати, а можно по подробнее про общение при помощи интерфесов? Я их еще не использовал, и честно мало представляю для чего они нужны, можно пример? |
|
|||||
|
я напишу зачем нужны интерфейсы, а вы сами почитаете что они из себя представляют, ок?
у вас две флэшки приложение и подгружаемый модуль например, у приложения есть метод say(val:String):void а у модуля есть что сказать но нету метода say задача: по просьбе приложения модуль должен вызвать метод say приложения если у вас в приложении будут такие строки: то определение класса Module будет вшито в основное приложение, а вы как раз пытаетесь вынести его в отдельный файл поэтому нужно использовать интерфейс: в этом случае в приложение будет вшит только интерфейс а определение класса будет только в модуле и аналогично в модуле, вам нужно сделать так чтобы класс приложения не вшивалcя в модуль, но чтобы была возможность вызывать методы приложения таким образом в файл приложение вшито определения класса приложения и интерфейс общения с модулем, а в модуль определение класса модуля и интерфейс общения с приложением
__________________
Хороший отдых - половина работы. Последний раз редактировалось artcraft; 30.08.2010 в 20:36. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Не используйте CSX для компилирования кода и компиляция тормозить не будет. Флекс умеет компилирование по частям, потому все компиляции, кроме первой, намного быстрее.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
бывают приложения таких размеров что компилировать их целиком в один swf вредно даже не потому что долго, а потому что незачем сразу загружать те модули которыми пользователь возможно и не собирается пользоваться, например уровни в игре
__________________
Хороший отдых - половина работы. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Я не говорю, что не надо делить на модули вообще. Но вот подгружать модули с кодом уже сомнительная выгода, чтоб код много весил надо умудриться. Ассеты (графика, какие-то координаты, настройки) - да, заметно сокращаем время загрузки и используемую память. Кстати, флэшевые порталы по крайней мере недавно любили, чтоб игры шли одним swf.
Ну и где много кода компилить в CSX - всяко изврат)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
неоднократно сталкивался с необходимостью делать подгружаемые модули с кодом
особенно это хорошо когда над каждым из модулей работают разные люди
__________________
Хороший отдых - половина работы. |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 168
|
Спасибо за разъяснение, начинаю понимать, попробую задействовать.
И спасибо также за информацию о флэкс компиляторе, буду переходить на него |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Интерфейсы удобная штука в том плане, что позволяют вам задать отличительные признаки некоторого объекта, и чтобы объект мог реализовать этот интерфейс он должен реализовать все эти признаки(то бишь свойства и методы). Сами интерфейсы вы можете использовать как обычные переменные-объекты, обладающие указанными в интерфейсе признаками. И далее по тексту программы вы можете использовать такую переменную для работы как обычный объект.
например IMyIFace описывает что объект должен содержать методы тогда в некой функции мы можем сделать так private function (obj:Object):void { var needObj:IMyIFace = obj as IMyIFace; if (needObj){ needObj.start(1250); trace ('Время ' + needObj.time); } }
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|