我在网上找到了这个功能,用于缩放对象并将它们保持在原始位置:
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;
}
我最初打电话的时候是这样的:
scaleArountPoint(obj, p, 0.9);
对象会缩小,但是,当我想将其恢复到原始大小时,显然这不起作用:
scaleArountPoint(obj, p, 1);
因为1是对象的当前比例。
那么如何将其缩放回原来的比例呢?感谢
答案 0 :(得分:2)
你可以做到这一点的一种方法是存储目标的原始矩阵,并始终将scaleFactor应用于此。
唯一的问题是,这只适用于一个对象,因为在对此函数进行一次调用时将存储orig。
如果你想将这个函数用于任意数量的对象,那么它需要更多的思考,但它应该足以让你开始。
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);
答案 1 :(得分:0)
保存更改的比例。所以当你scaleAroundPoint(obj, p, 0.9)
时,将0.9保存在某处。
然后,当您想缩放到原始尺寸时,缩放到1 / currentScale
请注意,当您多次调用scaleAroundPoint(对于同一个对象)时,您需要将新比例与当前比例(currentScale *= scaleFactor
)相乘,因此如果您将比例缩放两倍50%,则我们将理解新规模是原规模的25%。