2014-09-30 76 views
0

我試圖在運行時實現旋轉和調整動畫片段大小的轉換方法,並且在重新計算旋轉以跟隨鼠標時出現問題。在調整動畫片段大小後旋轉不同

我有一個方形影片剪輯,並在廣場的右下角,我正在聽鼠標事件和鼠標移動旋轉體對象(圓)我這樣做:

_rotation = -(Math.atan2((event.stageX - this.x ), (event.stageY - this.y))) * 180/Math.PI; 

this.rotation = rotation + 45;//this is because my rotator object is on right,bottom corner 

這個完美的作品只要我不修改對象的寬度或高度,但如果我修改,那麼對象的旋轉會有一個小的「跳躍」,這是我無法避免的。

我知道這是因爲event.stageX和even.stageY是不同的作爲rotator對象,與鼠標監聽器,已經移動resize事件後,但沒有線索如何避免「跳」。

請原諒我的英文不好

+0

你必須變換鼠標座標夾未旋轉的座標系首先然後計算角度,然後旋轉(因爲如果具有不同縱橫比調整然後原始剪輯然後在屏幕/鼠標和剪輯上的角度將不匹配) – Spektre 2014-09-30 07:19:20

+0

是的,@Spektre我認爲你是對的,我會稍後嘗試並讓你知道 – Delcasda 2014-09-30 14:39:20

回答

0

您需要圍繞其中心旋轉對象。

/** 
* Rotates the object based on its center 
* Parameters: @obj => the object to rotate 
* @ rotation => angle to rotate 
* */ 
public function RotateAroundCenter(obj:Object, rotation:Number):void 
    { 
     var bound:Rectangle = new Rectangle(); 
     // get the bounded rectangle of objects 
     bound = obj.getRect(this); 

     // calculate mid poits 
     var midx1:Number = bound.x + bound.width/2; 
     var midy1:Number = bound.y + bound.height/2; 

     // assign the rotation 
     obj.rotation = rotation; 

     // assign the previous mid point as (x,y) 
     obj.x = midx1; 
     obj.y = midy1; 

     // get the new bounded rectangle of objects 
     bound = obj.getRect(this); 

     // calculate new mid points 
     var midx2:Number = bound.x + bound.width/2; 
     var midy2:Number = bound.y + bound.height/2; 

     // calculate differnece between the current mid and (x,y) and subtract 
     //it to position the object in the previous bound. 
     var diff:Number = midx2 - obj.x; 
     obj.x -= diff; 
     diff = midy2 - obj.y; 
     obj.y -= diff; 
} 

用法:

_rotation = -(Math.atan2((event.stageX - this.x ), (event.stageY - this.y))) * 180/Math.PI; 
RotateAroundCenter(this, rotation + 45); 

檢查此link

+0

我很好奇你爲什麼不使用[Matrix] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Matrix.html)類嗎?這正是它在那裏的任務。 – Marty 2014-09-30 05:51:02