2009-05-22 4 views
1

Поскольку я создаю фреймворк Flex для мини-игр, я планирую связать кучу графических ресурсов (символы мувиклипа) в один файл swf, который я загружу в свое приложение Flex, прежде чем извлекать символы из swf-файла для использования в моей заявке. Мой вопрос таков: как мне это сделать с помощью ActionScript?Извлечение актива из swf-файла?

Спасибо!

ответ

1

Если вы не хотите использовать EMBED, и вы не хотите загружать активы во время выполнения, я рекомендую экспортировать swf в качестве SWC.

Таким образом, вы можете просматривать SWC-файлы из ActionScript. Вы можете проверять события во время компиляции, чтобы существовало подмассивиля внутри другого мувиклипа.

Если вы используете гибкий компилятор, то помните, добавив это при компиляции:

-library-path C:\path\to\your\file.swc 

Если вы используете FDT у вас есть возможность для автоматического добавления SWC в качестве аргументов.

Вот a demo о том, как это сделать с FDT. Не знаете, какой инструмент вы используете. Если это коммерческий Flex Builder, процесс должен быть аналогичным.

Я думаю, что это то, что вы ищете.

+0

+1 для рекомендации подхода SWC - я на самом деле не думал об этом. В некоторых случаях отсутствие на борту дополнительного SWF может быть преимуществом, хотя для веб-приложений это также может привести к значительному увеличению SWF. Тем не менее, в зависимости от обстоятельств приятно напоминать, что это вариант. –

+0

Спасибо. Это решение, а не решение. Это очень полезно для тех случаев, когда активы не меняются часто, а размер файла не является существенным. «Например, интерактивное приложение». Я настоятельно рекомендую использовать ресурсы времени выполнения одновременно с использованием SWC для тех файлов, которые могут потребоваться изменить. Мы не хотим перекомпилировать все, чтобы изменить образ, не так ли? :) – ozke

+0

Вы также можете скомпилировать с помощью RSL (разделяемая библиотека времени выполнения, в основном, swc, загруженная во время выполнения), таким образом вы все равно можете обновить swc позже и написать сильную типизацию. –

0

Я бы попытался создать файл AS/ID библиотеки.

что-то вдоль линий

package 
{ 

public class IconLibrary 
{ 

    /* 
    * Framework Icons 
    */ 

    [Embed (source="../assets/fof_graphics.swf", symbol="clapperboard_icon")] 
    public static const clapperBoardIcon:Class; 
    [Embed (source="../assets/fof_graphics.swf", symbol="clapperboard_over_icon")] 
    public static const clapperBoardOverIcon:Class; 
    [Embed (source="../assets/fof_graphics.swf", symbol="close_button")] 
    public static const closeButton:Class; 
    [Embed (source="../assets/fof_graphics.swf", symbol="close_over")] 
    public static const closeOverButton:Class; 

    public function IconLibrary() 
    { 
    } 

    } 

} 

Тогда все, что вам нужно сделать, это

source="{IconLibrary.clapperBoardIcon}" 

или что-то название актива, который вы хотите показать.

0

Лота хороших решений здесь, вот один, если вы загружаете SWF во время выполнения и хотите, чтобы извлечь средства, вы можете сделать следующее в заряжающего полный слушатель событий:

var c:Class = Class(LoaderInfo(e.target).applicationDomain.getDefinition("myClassDefinitionName")); 

Это будет хранить актив из swf как объекта класса, поэтому вы можете создавать его экземпляры так:

var asset:MovieClip = new c(); 
Смежные вопросы