提问人:PKYNI 提问时间:7/2/2014 更新时间:7/7/2014 访问量:130
缩放点以匹配背景。Actionscript 3 (英语)
Scaling points to match background. Actionscript 3
问:
使用我在网上找到的一些代码帮助我为我尝试制作的程序创建了一个缩放函数。它是制作一张地图,允许用户标记点。目前,代码仅在地图图像上放大,但我无法让点图标重新对齐到它们最初的位置。我无法计算它的数学。
用于放大和缩小的代码
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;
有什么想法吗?我使用的代码来自 http://www.flashandmath.com/howtos/zoom/
答:
0赞
BotMaster
7/7/2014
#1
问题中缺少很多元素,例如下面的移动地图。无论如何,现在已经解决了......
如果你不是数学天才,不能同时处理 2 个数学公式,那就不要,一个接一个地解决它们,然后将它们组合起来。同样,不要使用 point 的 x,y 属性进行计算,而是创建特定属性(例如在自定义类中)。为了方便起见,我将在这里命名它们的起源。 给定一个原点属性为 x:100、y:200 的点,它在地图上的位置为(假设地图是左上角的坐标,如果没有相应地调整):
point.x = map.x + point.origin.x;
point.y = map.y + point.origin.y;
定位已解决,现在您需要求解规模,这很简单:
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);
下一个:C# 重复文本到语音合成
评论