在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);
答案 0 :(得分:2)
我复制并粘贴了您的代码,似乎可以正常工作。当然,我不知道您的库符号是什么样的(我只使用了灰色sqare)并且我已经用静态值替换了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 :(得分:1)
请注意,过滤器不适用于大于“特定值”的剪辑,请查看this thread中的评论...
答案 2 :(得分:0)
我没有看到语法方面的任何问题。
dropShadow.distance = 1;
dropShadow.alpha = .2;
dropShadow.blurX = 10;
dropShadow.blurY = 10;
这已经逐渐消失了。将alpha更改为1或2,看看是否可以看到它。此外,您似乎没有设置颜色。我认为默认是黑色。确保你的物体不是在黑暗的东西上,你只是错过它。