О встраивании ресурсов (изображений) в проект AS3

Я использую flex sdk 4.5.1 и flash development для компиляции моего проекта AS3. У меня есть небольшие изображения, около 12 КБ, что глупо загружать их с помощью класса Loader, поэтому встраивание - лучшее решение.

Однако, когда эта строка в верхней части моего основного класса не используется, я получаю пустой swf

[Embed(source = "../assets/gui/play1.png", mimeType = "image/png")]
private var PlayUpImg:Class;

(когда я это комментирую, скомпилированный swf в порядке)

В чем может быть ошибка. Почему я получаю пустой swf?

Я работаю над чистым проектом AS3 в FlashDevelop


person Vlad    schedule 16.09.2011    source источник


Ответы (2)


Вы можете попробовать внедрить изображение png как произвольные двоичные данные с помощью типа mimetype «application / octet-stream». Затем вы должны использовать метод loadBytes() объекта Loader для загрузки двоичных данных изображения png. Ниже приводится пример этого:

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;

    [SWF(width="256", height="256", backgroundColor="#FF0000")]
    public class Main extends Sprite 
    {
        [Embed(source = "assets/ie9.png", mimeType = "application/octet-stream")]
        private var IE9:Class;

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var loader:Loader = new Loader();
            loader.loadBytes(new IE9());
            addChild(loader);

        }// end function

    }// end class

}// end package

[ОБНОВЛЕНИЕ]

Я знаю, что этот ответ уже принят, но вот дополнительный бонус.

введите описание изображения здесь

введите описание изображения здесь

person Taurayi    schedule 16.09.2011
comment
Это также работает для загрузки png из больших двоичных объектов, которые были сохранены в SQLite Db, это альтернатива простому встраиванию его в swf. - person CenterOrbit; 09.07.2012

Вам необходимо добавить изображение в список отображения:

package
{

    import flash.display.Bitmap;
import flash.display.Sprite;

    public class Main extends Sprite{

        [Embed(source = "../assets/gui/play1.png", mimeType = "image/png")]
        private var PlayUpImg : Class;

        public function Main()
        {
            var myImage : Bitmap = new PlayUpImg();
            addChild( myImage );
        }

    }

}
person Mattias    schedule 16.09.2011
comment
Пробовал, swf все еще пустой белый. - person Vlad; 16.09.2011
comment
Может быть, проблема в том, что я работаю над чистым проектом AS3. Должен ли я работать над проектом FLex 4 во Flash-разработке? - person Vlad; 16.09.2011
comment
Нет, это должно сработать. Вы можете опубликовать изображение или попробовать другое? - person Mattias; 16.09.2011
comment
Пробовал с другими png, даже с классом Loader работает, но с директивой Embed я все еще получаю весь пустой swf. Возможны ли какие-то неправильные настройки во Flex? - person Vlad; 16.09.2011
comment
Нужны ли мне надстройки flex sdk 4? :) - person Vlad; 16.09.2011
comment
Или это какая-то ошибка в FlashDevelop4 - person Vlad; 16.09.2011
comment
Кажется, у flex sdk 4.5.1 есть проблемы, но я не знаю. Думаю, это очень новая версия. Я пробовал использовать более старую версию flex sdk 4.0 и работал нормально. Он компилирует и показывает встроенное изображение. Поэтому я советую использовать старую версию flex sdk :) - person Vlad; 16.09.2011