Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как определить способ загрузки ? (http://www.flasher.ru/forum/showthread.php?t=123737)

eugenk 09.04.2009 10:34

Как определить способ загрузки ?
 
Задача такая. Есть флеш-приложение, играющее роль оболочки. Эта самая оболочка может подгружать другие флеш-приложения, играющие роль плагинов. Когда такой плагин загружается в оболочку, ему нужно передавать некий список параметров инициализации. И тут возникает такая проблема. Как этот самый плагин запустить самостоятельно без оболочки, с некоторыми параметрами инициализации по умолчанию ? Это не обязательно, но было бы желательно делать. Например для удобства отладки.

Можно было бы попытаться оболочкой перехватывать вызов конструктора плагина и подсовывать ему нужные инициализации вместо умолчательных. Однако как я выяснил, после загрузки sfw-файла конструктор вызывается всегда. Причем до возникновения событий COMPLETE или INIT. И перехватить вызов конструктора у оболочки никак не получается. Другой способ - определять в конструкторе плагина, каким способом файл был загружен. И если он был загружен просто в плеер, стартовать с параметрами по умолчанию. А если его загрузила оболочка, не делать ничего и ждать правильной инициализации. К сожалению с этим тоже ничего не вышло. ExternalInterface.ObjectID почему-то всегда возвращает null если запускается в отдельном плеере и Main при запуске в Firefox. Вне зависимости от способа загрузки - непосредственно или с помощью оболочки через Loader.load. Вобщем я с этой задачкой так и не справился. Просто закомментировал весь код конструктора в релизной версии плагина. А когда его отлаживал, там была инициализация с удобными для отладки параметрами. Так что сейчас плагин у меня самостоятельно без оболочки запускаться не может. Мне оно не особо и надо. Но кто знает, вдруг пригодится ? Кто нибудь из благородных донов сталкивался с описанной ситуацией ? Можете поделиться решением ?

mre 09.04.2009 12:32

Цитата:

Сообщение от eugenk (Сообщение 811981)
Однако как я выяснил, после загрузки sfw-файла конструктор вызывается всегда.

Нужно сделать так, чтобы класс подгружаемого "плугина" не был Document class-ом.

eugenk 09.04.2009 13:10

Document-класс ??? Честно говоря впервые слышу такое. Надо будет глянуть в документации. Сейчас все плагины я наследую от базового класса Plugin, который в свою очередь наследуется от Sprite и просто объявляет определенный интерфейс взаимодействия с оболочкой, которого все плагины должны придерживаться. Спасибо большое ! Всегда узнаешь что-то новенькое... :)

Мечтатель 09.04.2009 13:26

eugenk, в среде разработки Adobe Flash CS3 (CS4) введено новшество (оно правда давным-давно уже не является новшеством, но для Вас, похоже, это есть новшество) поле Document Class - для быстрого подключения главного класса приложения, тобишь создания точки регистрации программы.

eugenk 09.04.2009 13:50

Мечтатель, честно говоря я с Adobe Flash не работаю. Я чистый программист и всё пишу на FDT. Так что разумеется об этом не знал. Но поскольку штука важная, наверняка к ней есть доступ и из чисто языковой среды. Спасибо за подсказку где именно это искать.

s8000_1 09.04.2009 15:00

Плагин на то и плагин, чтобы отлаживать его в среде, которая его подключает, а не автономно.

Мало того, когда я такую задачку решал, я еще и исключал из плагинов классы ядра при компиляции, поэтому они вообще не работали, если их кто-то другой грузит.

eugenk 09.04.2009 16:52

s8000_1, ну это утверждение как бы немного спорно. Интерфейс плагинов я сделал лишь простейший. Намеренно упрощенный для легкости последующего наращивания функционала при сохранении совместимости. Из оболочки плагин вызывается функцией Command с параметрами, а сервисы оболочки из плагина функцией Callback. Вот и весь интерфейс кроме инициализации и контроля версий. А потому отдельная отладка тут вполне имеет смысл. Отдельный запуск релизных версий плагинов смысла пожалуй не имеет. Хотя кто знает... Я вообще очень люблю то что хорошо конфигурируется, и запускается во множестве режимов, вне зависимости от того на чем оно написано. Просто подход к разработке такой.

s8000_1 09.04.2009 16:57

Читерский метод, как проверить, откуда запущен плагин: в конструкторе проверить наличие stage:

Код AS3:

public function MyPluigIN(){
 super();
 if (super.stage){
  init();
 }
}

2й способ - никогда не запускать плагины самостоятельно. Т. е. всегда из какого-то контейнера инициализировать. Я использую контейнеры-инициализаторы для тестов. Иначе возникает жуткая путаница, кто чего откуда инициализирует.

Мечтатель 09.04.2009 19:49

Цитата:

Сообщение от eugenk (Сообщение 812018)
Я чистый программист и всё пишу на FDT. Так что разумеется об этом не знал.

Я тоже чистый программист и всё пишу на ADOBE Flash CS4, либо на ADOBE Flex Builder 3. Или тех кто пишут код на родной для Flash IDE от Adobe называют грязными?)))


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

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