I have this function that I found on the net for scaling objects and keeping them in their original positions:
function scaleAroundPoint(target:DisplayObject, point:Point, scaleFactor:Number):void
{
var m:Matrix = target.transform.matrix;
m.translate( -point.x, -point.y );
m.scale( scaleFactor, scaleFactor);
m.translate( point.x, point.y );
target.transform.matrix = m;
}
When I call it at first like this:
scaleArountPoint(obj, p, 0.9);
The object DOES scale down, but then, when I want to return it back to its original size, obviously this doesnt work:
scaleArountPoint(obj, p, 1);
Because 1 is the current scale ratio of the object.
So how would I scale it back to its original proportions? thanks
One way you could do this is by storing the original matrix of the target and always applying the scaleFactor to this.
The only problem is that this is only going to work for one object as the orig will be stored when one call has been made to this function.
If you want to use this function with any number of objects then it needs a little more thought, but it should be enough for you to start with.
import flash.display.Sprite;
import flash.geom.Point;
import flash.geom.Matrix;
var currentScaleFactor:int = 1;
var orig:Matrix;
function scaleAroundPoint(target:DisplayObject, point:Point, scaleFactor:Number):void
{
if(orig == null)
orig = target.transform.matrix;
var m:Matrix = orig.clone();
m.translate( -point.x, -point.y );
m.scale( scaleFactor, scaleFactor);
m.translate( point.x, point.y );
target.transform.matrix = m;
}
var spr:Sprite = new Sprite();
spr.graphics.beginFill(0x660000);
spr.graphics.drawCircle(100,100,100);
spr.graphics.endFill();
addChild(spr);
// set identity scale
scaleAroundPoint(spr, new Point(50,50), 1);
// try an arbitrary scale
scaleAroundPoint(spr, new Point(50,50), 0.2);
// revert to original scale
scaleAroundPoint(spr, new Point(50,50), 1);