簡體   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