Альтернатива для getDefinitionByName - PullRequest
4 голосов
/ 01 марта 2011

В прошлом был простой трюк , включающий модуль mxmlc путем добавления следующей строки в make-файл :

-include-libraries “/absolute/path/to/my/assets/assets.swc” 

Это дало вам возможность использовать getDefinitionByName, вспомогательную функцию для доступа к встроенной библиотеке ресурсов swc (вместо создания рукописных классов для всех активов).

К сожалению, перестал работать с . Кто-нибудь знает другое решение?

Ответы [ 3 ]

4 голосов
/ 18 июня 2011

К сожалению, единственный найденный мной обходной путь - это явная ссылка на каждый класс ресурсов где-то в коде.Вы можете создать фиктивный класс следующим образом:

public class AssetsExporter extends Sprite
{   
  public static function export()
  {
    AssetClass1;
    AssetClass2;
    //etc

    trace( "DEBUG AssetsExporter.export()" );
  }
}

Укажите этот класс как класс Document в Flash IDE, чтобы он был скомпилирован в результирующий swc.Затем в основном коде вашего приложения вызовите

AssetsExporter.export();

. После этого вы сможете использовать getDefinitionByName ().

1 голос
/ 01 марта 2011

Вы можете добавить их в библиотеки в настройках публикации.

Publish Settings

(Изображение из http://wiki.gigya.com/ через Google Images)

ByКстати, если вы используете файлы SWC, вы также можете сделать

new somepackage.SomeClass();

вместо

new getDefinitionByName("somepackage.SomeClass")

, где это применимо.Это связано с тем, что SWC-файлы включаются во время компиляции, а не во время выполнения.

0 голосов
/ 21 февраля 2012

Даже если вы можете изменить настройки компилятора вручную, это легко, если вы используете FlashDevelop, поскольку это очень просто исправить.

Щелкните правой кнопкой мыши включенный SWC из списка проектов. Выберите параметры, затем «включить библиотеку (полная библиотека)».

.. теперь вы можете использовать getDefinitionByName для получения класса без ссылок из файла swc.

...