2009-07-09 81 views
0

在as3中,我创建了一个阴影,效果很好。但是当我改变对象的高度或宽度时(mcWhiteBorder),阴影根本不会出现。有任何想法吗?更改高度和宽度时,不会显示Flash AS3阴影

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

请问上面的代码工作,或你有注释掉.height和.width语句?你已经在whiteBorder剪辑上有过滤器了,还是在里面?你正在清理过滤器的任何地方,还是以任何形式循环或行动? – typeoneerror 2009-07-10 15:44:37

回答

1

注意到,过滤器不与剪辑不是“一定值”更大的工作,看看在this thread评论...

0

我没有看到语法方面的任何问题。

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

这是相当淡化。将alpha更改为1或2,然后查看是否可以看到它。另外,你似乎没有设置颜色。我认为默认是黑色的。确保你的对象不是黑暗的东西,你只是想念它。

+0

事情是,我确实看到它。只要我不改变高度或宽度,所以我认为它不仅仅是阿尔法。 – Matt 2009-07-09 16:45:46

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

所以不是asigning过滤到filters属性,你实际上补充说,过滤器,以现有的。我很好奇,如果这有效。

+0

我从来没有任何问题指定过滤器的方式......你应该始终知道,DisplayObject.filters是一个数组,并以这种方式行事......如果你为过滤器分配一个新的过滤器数组,它显然会取代以前的所有过滤器...... – Cay 2009-08-07 10:36:15