Загрузка встроенного изображения в AS3 - PullRequest
2 голосов
/ 27 августа 2009

Хорошо, я чувствую себя глупо, спрашивая это, но я потратил весь день, пытаясь понять это, но безуспешно.

В AS3 я хочу добавить изображение в библиотеку (назовем его image.png) и создать его экземпляр, используя только код.

Мне удалось создать внешний образ таким образом

var pLoad:Loader = new Loader();
pLoad.load(new URLRequest("image.png"));
addChild(pLoad);

Но что бы я ни пытался, я не могу сделать то же самое, загружая изображение из библиотеки. Как это сделать?

В сторону: я видел синтаксис [embed], но в идеале я хотел бы избегать жестко закодированных имен изображений, то есть я хочу выбрать изображение и, таким образом, сгенерировать имя изображения программно.

Ответы [ 5 ]

5 голосов
/ 27 августа 2009

Ну, во-первых, вам нужно открыть окно свойств библиотеки и установить флажок «Export to Actionscript», после этого просто поместите симпатичную ссылку на ваш объект в текстовые поля класса, для этого примера я назову это MyImage, ок. Теперь давайте получим код.

var ImageClass:Class = getDefinitionByName("MyImage") as Class;
var image:Bitmap = new Bitmap(new ImageClass(575,430));
addChild(image);

Вот и все, здесь хорошо работает.

3 голосов
/ 27 августа 2009

Библиотека Flash довольно загадочная, но при правильном использовании она может быть довольно хорошим способом настройки рабочих процессов Flash ... Я попытаюсь прояснить все это:

Символы библиотеки с опцией «Экспорт для ActionScript» фактически скомпилированы как классы. Если нет файла класса с таким же именем класса, Flash создаст его при компиляции с тем же именем, которое вы объявите в поле «Класс». Это означает, что в вашем случае, если имя класса «image.png», оно фактически создаст класс «png» в пакете «image», расширяющем BitmapData (конечно, было бы разумнее дать ему другое имя класса, скажем, proyect.library.MyImage) ... это означает, что вам не нужен getDefinitionByName, просто создайте его экземпляр, как если бы вы использовали любой другой класс:

import image.png;
var bmd:BitmapData = new png(0,0); //the dimensions are irrelevant but necessary

Затем вам нужен экземпляр Bitmap, чтобы иметь возможность добавить его в displayList:

var bitmap:Bitmap = new Bitmap(bmd,"auto", true); //see the docs for the las two args
addChild(bitmap);
//Bitmap is a DisplayObject, so you can apply transformations to it as with any Sprite or MovieClip.

Все это относится к любому символу библиотеки (кроме графического) ... допустим, вы "экспортируете для AS" звуковой символ как "project.library.MySound", тогда вы можете просто сделать это:

import proyect.library.MySound;
var sound:Sound = new MySound();
sound.start();

Если у вас есть файл класса с тем же именем, что и символ вашей библиотеки, Flash попытается использовать его (если он наследует базовый класс по умолчанию). Вы заметите, что все эти символы имеют редактируемое поле базового класса. Вы также можете установить там собственный класс, если он наследует базовый класс по умолчанию ... В растровых изображениях это flash.display.BitmapData, звуки являются flash.media.Sound, шрифты являются flash.text.Font, мувиклипы являются flash .display.MovieClip и т. д. В случае MovieClips, если у вас нет фреймов, вы также можете создавать подклассы из Sprite.

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

2 голосов
/ 27 августа 2009

Улучшение на пути Руядорно, если вы уже знаете, что такое имя класса, просто:

var image:Bitmap = new Bitmap(new MyImage(0, 0));
addChild(image);

Битовые карты можно легко помещать в спрайты:

var image:Bitmap = new Bitmap(new MyImage(0, 0));
var sprite:Sprite = new Sprite;
sprite.addChild(image);
addChild(sprite);

Затем вы можете преобразовать спрайт как обычно.

n.b. Параметры для MyImage - это ширина и высота, но они являются фиктивными для подклассов, вы можете передать что угодно.

1 голос
/ 27 августа 2009

Согласно тому, что я обнаружил, это не так просто сделать в AS3, как это было в предыдущих версиях. Один из методов, который работал, состоял в том, чтобы создать MovieClip для хранения изображения, затем создать экземпляр этого MovieClip и добавить его на сцену. Другой метод состоял в том, чтобы создать класс для каждого добавляемого изображения, затем создать его экземпляр и добавить этот класс на сцену (шаги для которого расположены здесь .

Должны быть лучшие способы сделать это. Я продолжу поиск.

0 голосов
/ 27 августа 2009

Похоже, это работает:

var pDef:Class = getDefinitionByName("image.png") as Class;
var _image:BitmapData = new pDef(10, 10);

m_pSprite = new Sprite();           
m_pSprite.graphics.beginBitmapFill(_image);
m_pSprite.graphics.drawRect(0, 0, _image.width, _image.height);
m_pSprite.graphics.endFill();
addChild(m_pSprite)

Выглядит уродливо и излишне сложно, хотя. Любой другой путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...