Flex: как сгладить загруженный SWF и затем применить альфа, а не применять альфа, а затем сглаживать - PullRequest
2 голосов
/ 14 апреля 2011

У меня есть гибкое приложение, и я пытаюсь показать анимированные векторные фигуры на карте Google. Для этого я загружаю внешний SWF-файл (содержимое является динамическим, поэтому мне нужно загрузить его во время выполнения, а SWF был единственным загружаемым форматом, поддерживающим анимацию AFAIK) и помещаю его на карту с помощью наложения.

Затем мне нужно контролировать альфу SWF. Задать его просто, но по какой-то причине альфа кажется примененной к под-фигурам внутри SWF, и только после этого изображение накладывается на карту. Это делает желтый шарик, находящийся сверху зеленого шарика, скорее желтым, чем зеленым.

Мне нужно как-то сказать flex / flash, что «рендеринг / сглаживание SWF, затем применение альфы», а не «применение альфы к отдельным суб-формам, а затем сглаживание к карте». В идеале без прохождения, например, объект BitmapData или аналогичный.

Иерархия содержимого: Map -> BlobManager -> Loader -> Loader.content (SWF), и я попытался применить альфу к BlobManager, Loader и Loader.content отдельно, но без разницы. Я пробовал cacheAsBitmap на нижних уровнях, а затем применял альфа выше, но безрезультатно.

Есть предложения, что попробовать дальше? Спасибо!

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

Попробуйте BlendMode.LAYER , это спасло много жизней.

1 голос
/ 14 апреля 2011

Я не думаю, что вы можете сделать это без рисования загруженного контента на растровом изображении и использования его для отображения с альфа-каналом.Это довольно легко, хотя вы можете столкнуться с нарушениями безопасности, если загруженный контент находится в другом домене и не позволит вам создать bitmapData из него.

// content is the loaded external swf, or the Loader itself?
var bitmapData:BitmapData = new BitmapData(content.width, content.height);
bitmapData.draw(content);
var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.alpha = .5;
addChild(bitmap);

Может даже не потребоваться отображатьзагруженный контент (хотя я не пробовал этого), и вы также можете взять только часть его для использования в качестве bitmapData с использованием Matrix.

EDIT: для анимации другой вариант - загрузить анимированный GIF, как описано здесь: http://www.bytearray.org/?p=95 (у меня нет опыта с этим, поэтому я не могу сказать, будет ли это действительно работать для вас), или использовать видео.

...