Встраивание / импорт SWC во время компиляции в ActionScript без указания пути к библиотеке - PullRequest
1 голос
/ 12 марта 2011

Град, Стек!

У меня возникли небольшие проблемы с выяснением того, как импортировать SWC-файл непосредственно в ActionScript без указания пути к файлу библиотеки.

Для примера мне нужно что-то вроде этого:

package
{
    [Embed(source = 'Library.swc')] // This line won't work, of course...

    import ClassInsideSWC;

    public class MyClass extends ClassInsideSWC
    {
        public function MyClass()
        {
            super();
        }
    }
}

Кроме того, я не хочу (на самом деле, не могу) импортировать SWC, загружая его классом Loader.

Ну, кто-нибудь знает способ связать с SWC, используя только код ActionScript?


Отредактировано

Чтобы добавить больше информации о проблеме, я продемонстрирую свой сценарий с более подробной информацией ...

У меня есть класс SubClass, который будет независим от остальных. Это расширит класс SuperClass, который находится внутри SWC / SWF ...

У этого SWC / SWF есть вся структура. Я не могу скомпилировать каждый класс внутри одного SWF. Каждая часть моего фреймворка отдельно от SWF и будет загружена классом Loader во время выполнения.

К сожалению, ответ @frankhermes не сработает. Этот метод не загружает классы и не позволяет мне расширять или использовать другие классы внутри SWC.

Если я настрою путь к библиотеке, это станет возможным ...

Ответы [ 2 ]

3 голосов
/ 13 марта 2011

Возможное исправление ответа Шона Фудзивары:

[Embed(source="SWFWireDecompiler.swc", mimeType="application/octet-stream")]
public var SWC:Class;

может потребоваться:

[Embed(source="SWFWireDecompiler.swf", symbol="ClassInSWC")]
public class ClassInSWC
{
   ....
}

РЕДАКТИРОВАТЬ: в качестве продолжения после комментариев, это еще одна попыткаполучение приемлемого ответа:

package
{
    import flash.display.Sprite;

    public class SWCTest extends Sprite
    {
        public function SWCTest()
        {
            var extended:ExtendedCrumbs = new ExtendedCrumbs();
        }
    }

}

[Embed(source="../swfs/assets.swf", symbol="assets.Crumbs")]
class CrumbsInSWC
{

}

class ExtendedCrumbs extends CrumbsInSWC
{
    public function ExtendedCrumbs()
    {
        super();
    }

    // override something here
}

К сожалению, он работает только с SWF-файлами, но не с SWC, потому что вы не можете использовать symbol="..." внутри операторов Embed при использовании SWC.Но приведенный выше код компилируется.Поместите файл swf в любое место вашего проекта и настройте исходный путь внутри оператора Embed.

Надеюсь, это все еще полезно для вас!Frank

0 голосов
/ 13 марта 2011

Почему вы говорите: «Эта линия не будет работать, конечно ...»? Вы почти правы, просто упускаете несколько вещей.

[Embed(source="SWFWireDecompiler.swc", mimeType="application/octet-stream")]
public var SWC:Class;

Затем вы можете включить получение данных в виде ByteArray:

var data:ByteArray = new SWC();
...