Actionscript 3 缩放点以匹配背景。动作脚本3

Actionscript 3 缩放点以匹配背景。动作脚本3,actionscript-3,scale,formula,Actionscript 3,Scale,Formula,使用我在网上找到的一些代码帮助我为我正在尝试制作的程序创建了一个缩放功能。它是制作一张允许用户标记点的地图。目前代码仅在地图图像上缩放,但我无法使点图标重新对齐到它们原来的位置。我解不出它的数学题 用于放大和缩小的代码 if (mev.shiftKey) { image.scaleX = Math.max(scaleFactor*image.scaleX, minScale); image.scaleY = Math.max(scaleFactor*image.scaleY, m

使用我在网上找到的一些代码帮助我为我正在尝试制作的程序创建了一个缩放功能。它是制作一张允许用户标记点的地图。目前代码仅在地图图像上缩放,但我无法使点图标重新对齐到它们原来的位置。我解不出它的数学题

用于放大和缩小的代码

if (mev.shiftKey) {
    image.scaleX = Math.max(scaleFactor*image.scaleX, minScale);
    image.scaleY = Math.max(scaleFactor*image.scaleY, minScale);
}

if (mev.ctrlKey) {
    image.scaleX = Math.min(1/scaleFactor*image.scaleX, maxScale);
    image.scaleY = Math.min(1/scaleFactor*image.scaleY, maxScale);
    mat = image.transform.matrix.clone();
    MatrixTransformer.matchInternalPointWithExternal(mat,internalCenter,externalCenter);
    image.transform.matrix=mat;
这允许图像按以下因素放大

    public var scaleFactor:Number = 0.8;
    public var minScale:Number = 0.25;
    public var maxScale:Number = 2.0;
当我试图移动覆盖在该图像上的指针图标时,就会出现问题。它们现在不会变大或变小,但我无法用数学方法让它们从鼠标位置移开正确数量的像素,以便它们仍然在直线上。目前我使用以下公式

//decrease zoom
stage.getChildAt(i).x = stage.getChildAt(i).x * scaleFactor;

//increase zoom
stage.getChildAt(i2).x = stage.getChildAt(i2).x / scaleFactor;
有什么想法吗?我使用的代码来自

问题中缺少了很多元素,比如下面的移动地图。反正现在事情已经解决了

如果你不是一个数学天才,不能同时处理两个数学公式,那么不要一个接一个地处理它们,然后将它们组合起来。同样,不要使用point的x,y属性进行计算,而是创建特定的属性(例如在自定义类中)。为了方便起见,我将把它们命名为原产地。 给定原点特性为x:100,y:200的点,其在地图上的位置为(假设地图为左上角坐标,如果不相应调整):

定位已解决,现在您需要解决比例问题,这很容易:

point.x = point.origin.x * scaleFactor;
point.y = point.origin.y * scaleFactor;
两个系统都已解决,现在您可以将这两个系统结合起来:

point.x = map.x + (point.origin.x * scaleFactor);
point.y = map.y + (point.origin.y * scaleFactor);

不能直接将因子应用于x属性,这将导致错误的结果。相反,首先计算x位置在没有缩放的情况下的位置,然后应用缩放因子,然后设置x属性。您好,尝试了。当我放置针/指针时,我可以得到正确的位置,但当我添加比例因子时,它不会适当移动。stage.getChildAt(i).x是缩放前的正确位置。我确定我需要一个公式,但我想不起来。这种功能很容易实现,因为它只涉及一个因子值。有明确定义的静态位置x和y,比例因子应用于两者,到此结束。例如,比例因子为0.5的x:100,y:200的明确定义位置变为x:50,y:100。这真的没什么难的。您可以通过将新的x,y位置(缩放)除以比例因子来检查缩放是否正确,结果应始终为相同的值。问题是用户可以放大地图上的任何位置,并且比例因子以复合方式增加,我将上传一个演示到我的服务器上,这样你可以看到它目前做了什么,以及当前的代码,以便能够下载,因为比例因子和引脚的位置让我抓狂,我不能解释得太好。链接到网站,以查看尝试和源代码在这里
point.x = map.x + (point.origin.x * scaleFactor);
point.y = map.y + (point.origin.y * scaleFactor);