Flash AS3 тени не отображаются при изменении высоты и ширины - PullRequest
0 голосов
/ 09 июля 2009

В as3 я создаю тень, которая отлично работает. Но когда я изменяю высоту или ширину объекта (mcWhiteBorder), тень не появляется вообще. Есть идеи?

var mcWhiteBorder:whiteBorder = new whiteBorder();
var dropShadow:DropShadowFilter = new DropShadowFilter();
dropShadow.distance = 1;
dropShadow.alpha = .2;
dropShadow.blurX = 10;
dropShadow.blurY = 10;
mcWhiteBorder.height = houseXML.height-40;
mcWhiteBorder.width = houseXML.width+5;
mcWhiteBorder.x = houseXML.photoX-10;
mcWhiteBorder.y = houseXML.photoY+20;
mcWhiteBorder.filters = [dropShadow];

addChild(mcWhiteBorder);

Ответы [ 3 ]

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

Я скопировал и вставил ваш код, и он, кажется, работает. Конечно, я не знаю, как выглядит символ вашей библиотеки (я просто использовал серый квадрат), и я заменил переменную houseXML статическими значениями. Код, который я пробовал, выглядит следующим образом:

var mcWhiteBorder:whiteBorder = new whiteBorder();
var dropShadow:DropShadowFilter = new DropShadowFilter();
dropShadow.distance = 1;
dropShadow.alpha = .2;
dropShadow.blurX = 10;
dropShadow.blurY = 10;
mcWhiteBorder.height = 200;
mcWhiteBorder.width = 300;
mcWhiteBorder.x = 50;
mcWhiteBorder.y = 50;
mcWhiteBorder.filters = [dropShadow];

addChild(mcWhiteBorder);

Кажется, что он работает просто отлично. Проверьте houseXML и посмотрите, действительны ли назначенные вами значения и т. Д.

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

var mcWhiteBorder:whiteBorder = new whiteBorder();
var tmpFilters:Array = mcWhiteBorder.filters;
var dropShadow:DropShadowFilter = new DropShadowFilter();
dropShadow.distance = 1;
dropShadow.alpha = .2;
dropShadow.blurX = 10;
dropShadow.blurY = 10;
mcWhiteBorder.height = houseXML.height-40;
mcWhiteBorder.width = houseXML.width+5;
mcWhiteBorder.x = houseXML.photoX-10;
mcWhiteBorder.y = houseXML.photoY+20;
tmpFilters.push(dropShadow);
mcWhiteBorder.filters = tmpFilters;

addChild(mcWhiteBorder);

Таким образом, вместо присвоения фильтра свойству filters, вы фактически добавляете этот фильтр к существующим. Мне любопытно, если это работает.

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

Обратите внимание, что фильтры не работают с клипами, размер которых превышает «определенные значения», посмотрите комментарии в этой теме ...

0 голосов
/ 09 июля 2009

Я не вижу проблем с синтаксисом.

dropShadow.distance = 1;
dropShadow.alpha = .2;
dropShadow.blurX = 10;
dropShadow.blurY = 10;

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

...