issues to change the height and width of swf in as3? - actionscript-3

Hai am trying to add the height and width of swf dynamically but i cannot change stage.stageWidth and stage.stageHeight and also am tring with another method also.
[SWF( width="900", height="400")]
Its working fine but while adding the value dynamically it cannot change.
var hei:Number=500;
var wid:Number=300;
[SWF( width=wid, height=hei)]

The line
[SWF( width="900", height="400")]
is like telling the compiler to set properties for the SWF.
The variables you have written come into play only at runtime during which the compiler has no role to play. So basically, your code will be ignored.
You might want to have a look at this discussion here.

Related

How to detect if there is a drawing/graphic drawn on a movie clip in AS3?

I am a newbie to AS3. I have a movie clip.I want to know if there is a drawing/graphic drawn over movie clip at all?
Simple, check the width and height of the MovieClip. Assuming you mean the MovieClip itself contains the drawing/graphic.
After seeing Fygo's comment
I did some testing and found out that the scale properties of the MovieClip will change depending on whether or not it has any graphics.
Meaning if you set the width and height to zero, the corresponding scaleX and scaleY will also be set to zero. So what you can do is check the scale AND the dimensions of the MovieClip. If both scales are 1:1 and both dimensions are 0:0, that means you didn't mess with the dimensions and it truly is graphic-less.
trace (awd.scaleX, awd.scaleY, awd.width, awd.height);
//If you get 1 1 0 0 as the output, the MovieClip is empty
Use readGraphicsData(). I assume that if it's empty it means there is nothing drawn there :)
It's not perfect though, read the reference
Maybe you just mean collision detection? To detect if two movieClips are touching...?
For that you need either:
HitTestObject - (checks if two objects touching by their box boundaries) - Link:
or HitTestPoint - (read description carefully) - Link:
A good tutorial explaining both methods is here: - Link:
example code:
if ( MC_one.hitTestObject(MC_two) )
{
trace("MovieClip One is touching/over MovieClip Two");
//add code needed to happen when touching/over. example below
//MC_two.gotoAndStop(2); //example tells touched MC_two to change frame to 2
}

AS3 - Setting BitmapData Dimensions

I'm brand new to AS3, trying to take a bitmap from the library and display it in the timeline with actionscript. Here's the code I'm using so far as per Adobe's site:
addChild(new Bitmap(new myBitmap(100, 100)));
and this works, but changing the dimensions in those brackets doesn't. How can I change the dimensions?
Also, how can I change the position of the bitmap? Right now it's at 0,0.
You first get a handler of that bitmap:
var theBitmap:Bitmap=new myBitmap();
Then, you can change its coordinates:
theBitmap.x=100;
theBitmap.y=100;
addChild(theBitmap);
In order to do scaling, you can also alter its scaleX and scaleY properties as with any other displayed object. In order to make a Bitmap object to be of certain size on screen, you have to scale it so that scaling parameter equals (new dimensions)/(old dimensions). But, if you want something else, you have to explain it further.

Movieclip width changes instead of height

I'm working in Flash Builder 4.5 in pure Actionscript 3.0
I have a movieclip (swc) , I am doing the following :
_visualItem.bgMiddle.height = 200;
bgMiddle is an independant clip only has a single shape in it. On debugging the height remains the same (2.2) but the width changes to 5111. Haven't been able to track it down.
Anything I'm missing here?
Possibly some transforms applied to any of the DisplayObjectContainers higher up in the display tree could be affecting the item you're trying to change?

Can some one explain to me why the behavior of this ActionScript code is auto scale?

I'm new to AS3 and I'm doing some custom video player video project for AIR. While I was studying the simple examples (non-StageVideo) on how to play videos, I've encountered a unique situation where I got an awesome auto-scaling (stretch-to-fit) to window behavior from Flash.
Whenever I set the SWF directive's width and height equal to the width and height of the flash.media.Video object I'm creating. It does the auto-scaling, stretch-to-fit, resizable behavior. Like so:
// SWF directive placed before the class declaration of the main class
[SWF( width="1024", height="576", backgroundColor="000000", visible="true" )]
// somewhere in my initialization
myvid = new Video();
with( myvid )
{
x = 0;
y = 0;
width = 1024; // if I set this wxh equal to wxh in the SWF directive it auto-scales!
height = 576;
}
myvid.attachNetStream( myns );
addChild( myvid ); // must come after instancing of video and netstream, and attach to make the auto-scale work
myvid.play( "somevideo.flv" );
Even if I set the width to 16 and height to 9 on both it scales and fits perfectly on the size of my window. Can some explain me this behavior? None of what I read in the documentation mentioned this.
Don't get me wrong, I like this behavior! :) It made things easier for me. But code-wise I need to understand why is this happening as the code I set had nothing to do with auto-scaling.
Also, what the heck are directives for? Don't they just have pure ActionScript 3 equivalent? They look hackish to me.
I think the behavior you're describing is caused by the scale parameter in the HTML embed of the Flash. Generally this defaults to showAll, scaling the Flash up to fit the container.
There are two different sizes: the size of the container (the block in the HTML page) and the size of the Flash content (what you specify in the SWF tag). The scale mode decides the behavior when these sizes don't match. You can control this behavior either by tweaking that embed parameter, or from AS3 directly using stage.scaleMode:
import flash.display.StageScaleMode;
// scale the content to fit the container, maintaing aspect ratio
stage.scaleMode = StageScaleMode.SHOW_ALL;
// disable scaling
stage.scaleMode = StageScaleMode.NO_SCALE;
If you want to use the scale mode to your advantage, I would set the width of your Video to match the stage dimensions like so:
myvid.width = stage.stageWidth;
myvid.height = stage.stageHeight;
This way you avoid having to repeat the SWF width and height.
The directives mostly specify some metadata or instructions for the compiler. The SWF tag in particular specifies the info in the SWF header, such as desired width, height, framerate. Mostly these are just some suggestions to the player + container about how the file should be displayed. Some of them can be changed in code (stage.frameRate = 50;). Another metatag is Embed, which will bundle some assets into the SWF (particularly handy if you want to embed some binary data).

As3 Movieclip loaded in container reports exaggerated .width value

I am trying to load a swf(as3) into another As3 Swf with the Movieclip loader. After loading however Loader.width/loader.content.width returns an exaggerated value than the actual width of the swf being loaded. Any pointers on where to begin looking for the discrepancy?
Thanks in advance.
More Details (if it helps)
The swf being loaded has UI components like dropdowns, input boxes and combo boxes (its a Form to fill up), and a coded one-time tween.
When the child MC loads into the parent movieclip, the Loader.width value returned is exaggerated by about 28 pixels (although the height remains the same). Loader.content.width also returns a 28 pixel exaggerated value. The Exaggerated value is more than even the stage width of the child MC. The extra ~30 px are upsetting subsequent code in the parent movie to scale and center the loaded swf.
update:
stage.stageWidth returns the correct Value.
Code used in the parent MC, to load external SWF:
private var deadURL = "child.swf";
private var deadReq:URLRequest = new URLRequest(deadURL);
private var deadLoader:Loader = new Loader();
deadLoader.load(deadReq);
deadLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDeadLoad);
public function onDeadLoad(e:Event):void
{
addChild(deadLoader);
trace("content.width: " + deadloader.content.width); //returns exaggerated value
trace("width: " + deadLoader.width); //returns same exaggerated value
}
Could you post the code you are using to load the external SWF?
In which method are you reading the width/height value?
Which value do the following code return when executed inside the external swf?
trace(stage.stageWidth);
trace(stage.stageHeight);
If the parent MC is resized i.e. if in the Transform dialog it reads other than 100% then that transformation is passed on to any children.