繁体   English   中英

AS3:用鼠标旋转DisplayObject

[英]AS3: Rotate a DisplayObject with the Mouse

我基本上是在尝试创建一个显示对象转换管理器,该管理器将允许我缩放/旋转对象。 我目前正在尝试弄清楚如何旋转对象,以便其角跟随鼠标的当前x和y。

例子1 例子2 例子3

我总是对这样的事情感到困惑。 我知道如何监听事件和所有事件,只是不确定如何计算要应用的轮换数量。 我可能会通过矩阵旋转,以便围绕对象的中心而不是其左上角旋转对象。 谁会更精通此数学运算的人可以帮助我吗?

对TRABADOUR的回应

您的回答太出色了,我根本听不懂。 让我解释一下我能掌握和不能理解的。 以下是我不了解的内容的演练:

首先,保存图像的中间部分,即所谓的配准点,我们将围绕该点旋转所有内容:

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();

接下来,保存registrationPointmouseDownPoint之间的距离。 我记得在高中时曾学习过计算两个点之间的距离的知识,因此,我确定我可以挖掘出两个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM