Flash AS3 drop shadows don't show up when changing height & width - actionscript-3

In as3 I'm creating a drop shadow, which works fine. But when I change the height or width of the object (mcWhiteBorder) the drop shadow does not appear at all. Any ideas?
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);

I've copied and pasted your code and it seems to work. Sure, I don't know what your library symbol looks like (i just used a gray sqare) and I've replaced the houseXML variable with static values. The code I've tried is the following:
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);
It seems to work just fine.. Check your houseXML and see if the values you assign are valid and so on.
I've had some problems in the past with this, also. I've come to the conclusion that it always works if you're adding the filter to the existing filter array, instead of creating a new one, even if it's empty. I'm not really sure why. Your code would be something like:
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);
So instead of asigning a filter to the filters property, you're actually adding that filter to the existing ones. I'm curious if that works.

Take note that filters don't work with clips bigger than "certain values", have a look at the comments in this thread...

I'm not seeing any problems syntax-wise.
dropShadow.distance = 1;
dropShadow.alpha = .2;
dropShadow.blurX = 10;
dropShadow.blurY = 10;
That's pretty faded out. Change alpha to 1 or 2 and see if you can see it. Also, you don't seem to be setting the color. I think the default is black. Make sure you're object isn't over something dark and you're just missing it.

Related

AS3 remove FreeTransformManager move Easing

I'm using the FTS of Ryan Tan, by default it got an easing when you move the object, i searched in the code but i couldn't find how to remove it!
This is my set up
var fts:FreeTransformManager = new FreeTransformManager(false);
fts.dragArea = new Rectangle(0,0,3400,1000);
fts.boundingBoxOutlineThickness = 10;
fts.handleRadius = 0;
fts.handleOutlineThickness = 0;
fts._boundingBoxOutlineColor = 0xff9933;
fts.handleFillColor = 0x33cc33;
fts.buttonMode = true;
I Solved it by changing all Stage.mouseX by me.mouseX in the freeTransformManager.as

AS3 Why does editing a Textfield inside of a MovieClip throw all the sizes off?

I'm pretty frustrated with AS3 right now. It seems like there must be serious issues with how things scale inside of movieclips. From the stage everything seems to work fine.
On one of my projects I try to set a textfield.width equal to its container(movieclip)
tf.width = mc.width; Of course it says everything is even but when I look at the border of the textfield it's nowhere near the size of the movie clip it's contained within.
While trying to make a much smaller sample to share with you guys for help, that part worked, but trying to resize text did something completely different. Can anyone help me make sense of all this? The code below seemingly randomly starts changing the size of everything.
Also, I was trying to follow this code from here but just kept getting an error when trying to change the format size in a while loop: Autosize text to fit the width of a button
var square:MovieClip = new MovieClip();
addChild(square);
square.graphics.lineStyle(3,0x00ff00);
square.graphics.beginFill(0x0000FF);
square.graphics.drawRect(0,0,100,100);
square.graphics.endFill();
square.x = 0;
square.y = 0;
square.width = 200;
square.height = 200;
var tffSize = 400;
var tffOr:TextFormat = new TextFormat();
tffOr.size = tffSize;
tffOr.align = TextFormatAlign.CENTER;
var tf:TextField = new TextField();
square.addChild(tf);
tf.defaultTextFormat = tffOr;
tf.text = "Hello";
tf.border = true;
tf.width = square.width;
tf.height = square.height;
trace(tf.textWidth);
trace(square.width);
while (tf.textWidth > square.width || tf.textHeight > square.height)
{
trace("too Big");
newTFF();
trace(tf.textWidth + " vs " + square.width);
square.width = 200;
trace(tf.textWidth + " vs " + square.width);
}
function newTFF()
{
tffSize = tffSize - 1;
var tff:TextFormat = new TextFormat();
tff.size = tffSize;
tff.align = TextFormatAlign.CENTER;
//tf.defaultTextFormat = tff;
tf.setTextFormat(tff);
tf.autoSize = "left";
}

How to add a button in as

hi I am just starting to learn flex and action script. can someone tell me I doing wrong in this code.
public function createBoxes():void
{
//create a Panel
var colorsPanel:Panel = new Panel(); colorsPanel.layout = "absolute"; colorsPanel.width = 250; colorsPanel.height = 250;
//add the Panel to the Application
addElement(colorsPanel);
//create a red box
var redBox:Canvas = new Canvas(); redBox.x = 70; redBox.y = 70; redBox.width = 50; redBox.height = 50; redBox.setStyle("backgroundColor", 0xFF0000);
//create a green box
var greenBox:Canvas = new Canvas(); greenBox.x = 90; greenBox.y = 90; greenBox.width = 50; greenBox.height = 50; greenBox.setStyle("backgroundColor", 0x00FF00);
//create a blue box
var blueBox:Canvas = new Canvas(); blueBox.x = 100; blueBox.y = 60; blueBox.width = 50; blueBox.height = 50; blueBox.setStyle("backgroundColor", 0x0000FF);
//add the boxes to the Panel
var Button:spark.components.Button = new spark.components.Button(); Button.x = 120; Button.y = 60; Button.label ="removeG";
colorsPanel.addElement(redBox);
colorsPanel.addElement(greenBox);
colorsPanel.addElement(blueBox);
colorsPanel.addElement(Button);
}
thanks
I'm going to take a stab at it here...
Are you using a Spark panel, or a Halo panel?
The way you can tell is by looking at your import statements.
If you see the line:
import spark.components.Panel;
Then you're using a Spark Panel. In this case, you cannot set the layout property using a string. Instead you have to use an instance of a class that extends LayoutBase, such as BasicLayout. If, however, you see this line instead:
import mx.containers.Panel;
Then you're using a Halo Panel and I'm not sure what the problem is - you'll need to better describe the difference between what you expect to happen and what is actually happening. If you're getting some kind of error, post the text of the error.

as3 text-wrap problems, firefox, mac

So, I've built a little site for a client that doesn't seem to have any problems for me. I post it, and my client reports to me that some of the text is being clipped off in the text fields. I try to recreate the problem on my pc with chrome and firefox, but everything works fine. But he sends me screenshots from his mac with firefox, and sure enough they are being clipped. He claims its only fire-fox, and it is not a factor of window size. so here are the images to show whats going on:
Further most right words should be "Alabama" & "growing"
and here is the code that produces that text (descTextNew is the culprit here):
nameText.text = names[elementNumber];
nameText.autoSize = "center";
nameText.x = object.x + (.5 * videoWidth) - (.5 * nameText.width);
nameText.y = object.y + videoHeight + 8;
nameText.background = true;
nameText.backgroundColor = 0x000000;
textStyling.color = 0xFFFFFF;
textStyling.size = 20;
textStyling.font = myFont.fontName;
textStyling.letterSpacing = 3;
textStyling.align = "center";
nameText.embedFonts = true;
nameText.setTextFormat(textStyling);
container.addChild(nameText);
descTextNew.text = descArrayContent[elementNumber];
descTextNew.y = object.y + videoHeight + nameText.textHeight + margin - 15;
descTextNew.width = nameText.textWidth + 30;
descTextNew.x = object.x + ( (videoWidth - descTextNew.width) / 2 );
descTextNew.wordWrap = true;
descTextNew.autoSize = "left";
descTextNew.background = true;
descTextNew.backgroundColor = 0x000000;
descTextStyling.color = 0xFFFFFF;
descTextStyling.size = Math.round(11 * 1000/stage.stageWidth);
descTextStyling.font = myFont.fontName;
descTextStyling.letterSpacing = .5;
descTextStyling.align = "left";
descTextNew.setTextFormat(descTextStyling);
container.addChild(descTextNew);
Some of these variables are declared as instance variables prior like this:
var names:Array = new Array();
var nameText:TextField = new TextField();
var textStyling:TextFormat = new TextFormat();
var descTextNew:TextField = new TextField();
var descTextStyling:TextFormat = new TextFormat();
var margin:int = 28;
var videoWidth:int = 267;
var videoHeight:int = 150;
arrays names and descArrayContent have the strings "Paul Rollins, Sr." and "Paul Rollins runs a funeral... " added to them at an index number determined by the variable elementNumber. Also object is the image you see in the pic. don't think its necessary to show you that code.
Here's a link if you want to see it in action:
www.footsoldiers.org/test2/
Any ideas what the hell is going on? I don't know where to start.
Have you tried invalidating the control for redraw manually?
this.invalidateDisplayList();
this.invalidateLayering();
this.invalidateLayoutDirection();
this.invalidateProperties();
this.invalidateSize();
I would try to set the .text property after you have set all the other properties.
So try putting the descTextNew.text = descArrayContent[elementNumber] action on the last line.
If this still doesn't fix your problem, I would recommend to also include the descTextNew.multiline = true property.
Good luck!

How to set dynamic locations in an Image using actionscript3.0?

I want to set different locations in an Image, and when I mouse over the location it needs to shows something('box' or 'x' nd 'y' position of the location). How can i achieve this.?
Hope, you want to set some locations in the stage and u want to store something.
If that, your coding is good. here after u can achieve that by using amf-php for back end purpose. php will help u store values in the database. refer google to know about amf-php.
good luck.
not sure wht you are looking for, may be something like that
http://www.oscartrelles.com/archives/dynamic_movieclip_registration_with_as3
Not registration point...
var msgBox:messageBox;//package
var loc:Array = new Array();
for(var i:uint = 0;i<20;i++)
{
for(var j:uint = 0;j<14;j++)
{
spr = new Sprite();
spr.graphics.beginFill(0xaaaaaa,.1);
spr.graphics.drawCircle(0,0,10);
spr.graphics.endFill();
addChild(spr);
loc.push(spr);
spr.x = 30 + i * spr.width * 1.3;
spr.y = 30 + j * spr.height * 1.3;
}
}
for(i=0; i<loc.length;i++)
{
loc[i].name = "unknown "+i;
loc[i].buttonMode = true;
loc[i].addEventListener(MouseEvent.MOUSE_OVER, mouseOverAction);
loc[i].addEventListener(MouseEvent.MOUSE_OUT, mouseOutAction);
}
function mouseOverAction (e:MouseEvent):void
{
msgBox = new messageBox(100,20,6,0xFFFFFF);
addChild(msgBox);
cur_loc_name = new TextField();
cur_loc_name.text = e.target.name;
msgBox.addChild(cur_loc_name);
cur_loc_name.x = 5;
cur_loc_name.y = 1;
msgBox.x = mouseX + 20;
msgBox.y = mouseY + 26;
}
function mouseOutAction (e:MouseEvent):void
{
removeChild(msgBox);
}
Run this code. It will fill the stage with 280 sprites, and each sprite can have diff instance name..
I wants to do this using pixels...or any other way to do?