I am using flash (AS3) and have a dynamic movie clip that I want to scale up or down using a slider bar. I have this working very well using the scaleX and scaleY functions.
The only trouble is that these scale from the left hand side of the document and I would like it to be scaled from the center
Any help is appreciated.
function scaleFromCenter(dis:*, sX:Number, sY:Number):void
{
var prevW:Number = dis.width;
var prevH:Number = dis.height;
dis.scaleX = sX;
dis.scaleY = sY;
dis.x += (prevW - dis.width) / 2;
dis.y += (prevH - dis.height) / 2;
}
scaleFromCenter(yourMovieClip, 0.3, 0.3);
..
Or have a look at Greensocks TweenMax/AutoFitArea
http://www.greensock.com/autofitarea/
Very powerful and easy to use.
In order to scale / Rotate from the center of the object you need to do the following
- Translate the object to 0,0.
- Scale / Rotate
- Translate it back to its original x,y.
Here is a piece of code that does it.
private function scaleInPosition(dis:Sprite,sX:Number,sY:Number):void
{
var posX:Number = dis.x;
var posY:Number = dis.y;
dis.x =dis.y = 0;
dis.scaleX = sX;
dis.scaleY = sY;
dis.x = posX;
dis.y = posY;
}
Simply create the object that you're scaling with it's 0,0 registration crosshair at the centre.
来源:https://stackoverflow.com/questions/8574943/scaling-from-the-center-in-flash