2009-07-09 4 views
0

Dans as3, je crée une ombre portée qui fonctionne correctement. Mais quand je change la hauteur ou la largeur de l'objet (mcWhiteBorder) l'ombre portée n'apparaît pas du tout. Des idées?Les ombres portées de Flash AS3 ne s'affichent pas lorsque vous modifiez la hauteur et la largeur

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

Est-ce que le travail de code ci-dessus ou avez-vous commenter le .height et les instructions .width? Avez-vous déjà des filtres sur le clip whiteBorder ou à l'intérieur de celui-ci? Tout endroit où vous nettoyez les filtres ou est-ce dans n'importe quel type de boucle ou d'action? – typeoneerror

Répondre

1

Prenez note que les filtres ne fonctionnent pas avec des clips plus grandes que « certaines valeurs », ont un regard sur les commentaires dans this thread ...

0

Je ne vois aucun problème de syntaxe.

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

C'est assez décoloré. Changez alpha à 1 ou 2 et voyez si vous pouvez le voir. En outre, vous ne semblez pas définir la couleur. Je pense que la valeur par défaut est le noir. Assurez-vous que votre objet n'est pas sur quelque chose de sombre et vous êtes juste manquant.

+0

Eh bien, la chose est, je le vois. Tant que je ne change pas la hauteur ou la largeur, je pense que c'est plus que l'alpha. – Matt

2

J'ai copié et collé votre code et cela semble fonctionner. Bien sûr, je ne sais pas à quoi ressemble le symbole de votre bibliothèque (j'ai simplement utilisé un sqare gris) et j'ai remplacé la variable houseXML par des valeurs statiques. Le code que j'ai essayé est le suivant:

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

Il semble fonctionner très bien .. Vérifiez votre houseXML et voir si les valeurs attribuées sont valides et ainsi de suite.

J'ai eu quelques problèmes dans le passé avec ceci, aussi. Je suis arrivé à la conclusion que cela fonctionne toujours si vous ajoutez le filtre au tableau de filtres existant, au lieu d'en créer un nouveau, même s'il est vide. Je ne suis pas vraiment sûr pourquoi. Votre code serait quelque chose comme:

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

Ainsi, au lieu de asigning un filtre à la propriété filters, vous ajoutez en fait que le filtre à ceux qui existent déjà. Je suis curieux de savoir si cela fonctionne.

+0

Je n'ai jamais eu de problème pour assigner des filtres de cette façon ... vous devez toujours être conscient que DisplayObject.filters est un tableau et se comporte ainsi ... si vous assignez un nouveau tableau de filtres à un clip avec des filtres, il va évidemment remplacer tous les filtres précédents ... – Cay