Тени Flash AS3 не отображаются при изменении высоты и ширины

В 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);

person Matt    schedule 09.07.2009    source источник
comment
Работает ли приведенный выше код или вам нужно закомментировать операторы .height и .width? У вас уже есть фильтры на клипе whiteBorder или внутри него? В любом месте, где вы очищаете фильтры, или это в каком-либо цикле или действии?   -  person typeoneerror    schedule 10.07.2009


Ответы (3)


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

person Cay    schedule 07.08.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, вы фактически добавляете этот фильтр к существующим. Мне любопытно, работает ли это.

person evilpenguin    schedule 07.08.2009
comment
У меня никогда не было проблем с назначением фильтров таким образом ... вы всегда должны знать, что DisplayObject.filters является массивом и ведет себя таким образом ... если вы назначаете новый массив фильтров клипу с фильтрами на нем, он очевидно заменит все предыдущие фильтры ... - person Cay; 07.08.2009

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

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

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

person McAden    schedule 09.07.2009
comment
Дело в том, что я это вижу. Пока я не меняю высоту или ширину, я думаю, это больше, чем просто альфа. - person Matt; 09.07.2009