PDA

Просмотр полной версии : Хочу сделать прелоадер без getDefinitionByName


mikhailk
03.04.2019, 17:56
Собственно, сабж.

Сейчас прелоадер реализован стандартным образом через

[Frame(factoryClass="Preloader")]

Однако, такая реализация подразумевает, что потом в прелоадере, когда он загрузит все, что должен, будет вызвано


var mainClass:Class = getDefinitionByName("MainClass") as Class;
addChild(new mainClass() as DisplayObject);


Стоит задача убрать из кода getDefinitionByName.
Нет ли какого способа передать в Preloader класс напрямую?
Чтобы он его не вычислял?

СлаваRa
03.04.2019, 18:58
Если не секрет, то в чем проблема?

mikhailk
03.04.2019, 19:08
Секрет. :)
Считаем, что просто анализирую возможность реализации прелоадера без getDefinitionByName.

caseyryan
04.04.2019, 09:48
Нет ли какого способа передать в Preloader класс напрямую?
Так в этом же и состоит вся суть загрузчика. Если класс передать напрямую, он с собой все зависимости подтянет и смысл загрузчика потеряется

mikhailk
04.04.2019, 11:49
Это я понимаю

Возможно, хотелось какой-нибудь трюк, типа:
1. в коде прелоадера есть переменная mainAppClass, которая по определению null
2. после загрузки эта переменная каким-то чудом начинает ссылаться на главный класс приложения
3. как только она не null - дальше все как обычно

Опять же, конструкция [Frame(factoryClass="Preloader")]
Пользуюсь тысячу лет, но ни разу не видел спецификацию на нее.

RedHead90
04.04.2019, 17:43
после загрузки эта переменная каким-то чудом начинает ссылаться на главный класс приложения

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