[英]AS3: setting registration point of a DisplayObject with actionscript?
[英]AS3: Rotate a DisplayObject with the Mouse
我基本上是在尝试创建一个显示对象转换管理器,该管理器将允许我缩放/旋转对象。 我目前正在尝试弄清楚如何旋转对象,以便其角跟随鼠标的当前x和y。
我总是对这样的事情感到困惑。 我知道如何监听事件和所有事件,只是不确定如何计算要应用的轮换数量。 我可能会通过矩阵旋转,以便围绕对象的中心而不是其左上角旋转对象。 谁会更精通此数学运算的人可以帮助我吗?
您的回答太出色了,我根本听不懂。 让我解释一下我能掌握和不能理解的。 以下是我不了解的内容的演练:
首先,保存图像的中间部分,即所谓的配准点,我们将围绕该点旋转所有内容:
var box:Sprite = new BeautifulSprite();
box.width = box.height = 100;
/* ... */
var registrationPoint:Point = new Point(box.x + box.width / 2,
box.y + box.height / 2);
到目前为止,我是否正确? 如果是这样,我会继续。
其次,表示鼠标向下的原始位置:
var mouseDownPoint:Point = new Point(box.mouseX, box.mouseY);
第三,存储“向量”。 问题是,我不确定你是什么意思。 我熟悉Java和AS3中的Vector类型,因为它们存储某种类型的值的列表。 除此之外,我迷路了。
var vector:* = WTF.forReals();
接下来,保存registrationPoint
和mouseDownPoint
之间的距离。 我记得在高中时曾学习过计算两个点之间的距离的知识,因此,我确定我可以挖掘出两个2d点之间的距离的公式。
var distance:Number = calculateDistance(registrationPoint, mouseDownPoint);
我知道我要靠近了! 接下来,要确定约束比例,我们获取当前鼠标的位置,确定其与registrationPoint
距离,然后将其除以distance
。
var constrainedScale:Number = calculateDistance(registrationPoint, new Point(mouseX, mouseY)) / distance;
我的问题是: 当我不希望它们受到约束时如何获得值,例如scaleX和scaleY?
现在,要获得围绕注册点的实际旋转,我完全迷失了。 使用上面定义的变量,您能帮帮我吗?
将缩放/旋转中心的鼠标坐标表示为(x0,y0),将处于未缩放,未旋转状态的鼠标角表示为(x1,y1)。 存储点(x0,y0),并缓存矢量和(x0,y0)与(x1,y1)之间的距离。 用v0表示缓存的矢量,用d0表示距离。
要获得比例因子,只需计算当前鼠标坐标到(x0,y0)的距离,然后将其除以d0。
要获取旋转角度,请首先计算(x0,y0)与当前鼠标坐标之间的向量。 用v表示。然后使用点积公式计算角度
v.v0 = | v | d0 cos(θ)
这会给你0到pi之间的值。 要进入正确的象限,只需检查v和v0的叉积的符号并相应地进行调整。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.