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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.08.2010, 14:56
AlliAS вне форума Посмотреть профиль Отправить личное сообщение для AlliAS Найти все сообщения от AlliAS
  № 1  
Ответить с цитированием
AlliAS
 
Аватар для AlliAS

Регистрация: Aug 2007
Сообщений: 168
По умолчанию Проблемы с организацией модульности

Здравствуйте.

Уже 4 месяца разрабатываю проект, и пришел к выводу к данному моменту он слишком много стал весить и слишком долго компилироваться, поэтому возникла идея разделить его на модули. Поинтересовавшись как это можно сделать попробовал: вынес один из классов в отдельный FLA, вместе со связанными символами в библиотеке, сделал загрузчик, который получает определение класса из applicationDomain загружаемого модуля, и очень обрадовался когда обраружил что во первых все работает, а во вторых модуль очень быстро компилируеться. Думал "ух, наконецто не нужно будет компилировать проект целиком, как скорость разработки то увеличиться" (проект целиком копилируеться около 2х минут, и на это уходит больше часа в день), но внеся изменения в код, обнаружил, что изменеия при компиляции только модуля, без основного исходника, совершенно не происходят. Сначала не понимал в чем дело, но потом просмотрев код понял - судя по всему это из-за того, что в самом проекте я использую статические переменные класса, который ассоциирован с основным клипом модуля, думал что эта проблема решиться если ображаться к статическим переменным через ту, которой я присваиваю определение класса, но в этом случае при вызове модуля вылезает ошибка "невозможно вызвать объект со ссылко на null", и так везде где происходит обращение к статическим переменным.

Что я собственно хочу узнать, так это есть ли способ обращаться к статическим переменным класса, определение которого получено при окончинии загрузки, методом getDifinition. И если можно то как?

Старый 30.08.2010, 15:22
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 2  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Вынужден вас огорчить, если вы используете в обоих модулях один и тот же класс, то его изменение требует перекомпиляции обоих модулей, иначе результаты будут мягко говоря неадекватными. лучший способ использовать интерфейсы для обмена "тычками" между модулями. По идее если у вас есть статический метод(переменная, константа) как только он инициирован в текущем приложении то последующая загрузка любого элемента приводит к тому, что он будет использовать уже существующую ссылку.
Кстати просвятите что значит
Цитата:
я использую статические переменные класса, который ассоциирован с основным клипом модуля
Приведите кусок кода где у вас выпадает ошибка. И код ошибки, так будет проще подсказать
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 30.08.2010, 16:44
AlliAS вне форума Посмотреть профиль Отправить личное сообщение для AlliAS Найти все сообщения от AlliAS
  № 3  
Ответить с цитированием
AlliAS
 
Аватар для AlliAS

Регистрация: Aug 2007
Сообщений: 168
Код привести уже не могу, откатил исходники в svn до рабочего состояния, ошибки вылетали такие:
Код AS3:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
Кстати, а можно по подробнее про общение при помощи интерфесов? Я их еще не использовал, и честно мало представляю для чего они нужны, можно пример?

Старый 30.08.2010, 19:02
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 4  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
я напишу зачем нужны интерфейсы, а вы сами почитаете что они из себя представляют, ок?

у вас две флэшки приложение и подгружаемый модуль
например, у приложения есть метод say(val:String):void
а у модуля есть что сказать но нету метода say

задача: по просьбе приложения модуль должен вызвать метод say приложения

если у вас в приложении будут такие строки:
Код AS3:
var m:Module = createInstanceOf('module') as Module;
m.saySomething(this);
то определение класса Module будет вшито в основное приложение, а вы как раз пытаетесь вынести его в отдельный файл поэтому нужно использовать интерфейс:
Код AS3:
var m:IModule = createInstanceOf('module') as IModule;
m.saySomething(this);
в этом случае в приложение будет вшит только интерфейс а определение класса будет только в модуле

и аналогично в модуле, вам нужно сделать так чтобы класс приложения не вшивалcя в модуль, но чтобы была возможность вызывать методы приложения
Код AS3:
public function saySomething(app:IApp):void{
  app.say("Hello World");
}
таким образом в файл приложение вшито определения класса приложения и интерфейс общения с модулем, а в модуль определение класса модуля и интерфейс общения с приложением
__________________
Хороший отдых - половина работы.


Последний раз редактировалось artcraft; 30.08.2010 в 20:36.
Старый 30.08.2010, 19:12
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Не используйте CSX для компилирования кода и компиляция тормозить не будет. Флекс умеет компилирование по частям, потому все компиляции, кроме первой, намного быстрее.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 30.08.2010, 19:19
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 6  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
бывают приложения таких размеров что компилировать их целиком в один swf вредно даже не потому что долго, а потому что незачем сразу загружать те модули которыми пользователь возможно и не собирается пользоваться, например уровни в игре
__________________
Хороший отдых - половина работы.

Старый 30.08.2010, 19:30
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Я не говорю, что не надо делить на модули вообще. Но вот подгружать модули с кодом уже сомнительная выгода, чтоб код много весил надо умудриться. Ассеты (графика, какие-то координаты, настройки) - да, заметно сокращаем время загрузки и используемую память. Кстати, флэшевые порталы по крайней мере недавно любили, чтоб игры шли одним swf.
Ну и где много кода компилить в CSX - всяко изврат)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 30.08.2010, 19:54
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 8  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
неоднократно сталкивался с необходимостью делать подгружаемые модули с кодом
особенно это хорошо когда над каждым из модулей работают разные люди
__________________
Хороший отдых - половина работы.

Старый 30.08.2010, 20:10
AlliAS вне форума Посмотреть профиль Отправить личное сообщение для AlliAS Найти все сообщения от AlliAS
  № 9  
Ответить с цитированием
AlliAS
 
Аватар для AlliAS

Регистрация: Aug 2007
Сообщений: 168
Спасибо за разъяснение, начинаю понимать, попробую задействовать.
И спасибо также за информацию о флэкс компиляторе, буду переходить на него

Старый 30.08.2010, 21:05
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 10  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Интерфейсы удобная штука в том плане, что позволяют вам задать отличительные признаки некоторого объекта, и чтобы объект мог реализовать этот интерфейс он должен реализовать все эти признаки(то бишь свойства и методы). Сами интерфейсы вы можете использовать как обычные переменные-объекты, обладающие указанными в интерфейсе признаками. И далее по тексту программы вы можете использовать такую переменную для работы как обычный объект.
например IMyIFace описывает что объект должен содержать методы
Код AS3:
function start(num:int):void;
function end():Boolean;
function get time():int;
тогда в некой функции мы можем сделать так
Код AS3:
private function (obj:Object):void {
  var needObj:IMyIFace = obj as IMyIFace;
  if (needObj){
    needObj.start(1250);
    trace ('Время ' + needObj.time);
  }
}
Иногда интерфейсы используют просто как маркеры, в таком случае они не описывают никаких свойств, а просто помечают объект что он принадлежит к некоему семейству. И в коде по маркеру-интерфейсу вы можете выделять необходимые объекты легко сравнивая их например так
Код AS3:
if (obj is IMyMarkerIface) {
  trace('ура это он');
}
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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