2009-11-23 73 views
0

好的,所以我一直試圖讓這個概念現在工作,並沒有運氣。我不擅長數學,所以任何幫助將不勝感激。我正在嘗試從中心旋轉居中的容器。這個代碼的問題是當我使用rotatePicture方法時,它不會從中心旋轉,而是從框的左上角旋轉。下面的代碼...旋轉中心內容

import mx.effects.Rotate; 

    private function init():void 
    { 
     calculateCoordinates(); 
    } 

    private function rotateBox():void 
    { 
     var m:Matrix   = myBox.transform.matrix; 
     var centerX:Number  = myBox.width/2; 
     var centerY:Number  = myBox.height/2; 

     var centerPoint:Point = new Point(centerX, centerY); 
     var transformPoint:Point= m.transformPoint(centerPoint); 


     m.translate(-transformPoint.x, -transformPoint.y); 
     m.rotate(90 * Math.PI/180); 

     m.translate(transformPoint.x, transformPoint.y); 

     myBox.transform.matrix = m;   

     this.callLater(calculateCoordinates); 
     //calculateCoordinates(); 

    } 

    private function calculateCoordinates():void 
    { 
     var x : Number = (myBox.parent.width - myBox.width)/2; 
     x = x < 0 ? 0 : x; 
     var y : Number = (myBox.parent.height - myBox.height)/2; 
     y = y < 0 ? 0 : y; 
     myBox.move(x, y); 
    } 
+0

如果座標從左上角開始,框的中心是正x和負y?你有沒有嘗試讓centerY變量消極? – 2009-11-23 03:58:37

回答

1

好吧,這是一個有點棘手,我工作了幾個細節,但在任何情況下也有類似的問題,我發現最普遍的回答。剛拍電影休息刷新腦...

我不得不地方多少輪番畫布旋轉了一個變量,它很簡單,因爲我是制約度只有90。然後我在switch語句中放置測試轉角變量並基於轉角重新計算(x,y)座標。因爲我知道Rotate類會創建一個更酷的效果並以相同的結果結束,所以我最終使用它。

乾杯!

1

個人而言,我包裹容器在另一個精靈,定位,以便其中心爲(0,0)在精靈座標空間,然後只需旋轉精靈......這是簡單而強大的...

+0

覈准!儘管我不知道我是如何隨心所欲地創造包裝精靈的。我寧願做內部計算,但這一切都取決於應用程序的規模 – 2009-11-23 19:21:59

1

我不知道你的背景是什麼,但我的經驗是這樣的「出自己的思維」的經典案例。

您已經編寫了相當多的代碼來完成Flash顯示API本身的功能。

由於您似乎正在使用Flex,我只會告訴您,實現此目的的簡單方法是動態地重新定位您的顯示片段內容,以便內容的中心位於片段的0,0點處。

這會讓你擁有的內容越多越難,但如果你只是像圖片或按鈕或者你有什麼東西,只需計算高度和寬度,然後除以2並減去即可。

然後旋轉屬性將工作得很好。

在Flash中,因爲你可以做一個新的剪輯,你的類綁定到剪輯,將所有你的內容正確定位旋轉按預期運行Flash創作工具那就更簡單了。

是的,Back2Dos說什麼。

+0

我實際上有一個工作示例,但問題是當我動態縮放以居中的內容時。我發現(x,y)座標也在旋轉,而不是重新計算最靠近屏幕左上角的點。所以當我將容器向左旋轉90度時,(x,y)座標位於容器的左下角。這通常不會是一個問題,除了我從中心調整內容(縮放)的事實。當我重新計算盒子的中心時,它基於註冊點而不是視覺左上角 – Adrian 2009-11-23 20:36:16

+0

,它會有點古怪,因爲視覺上註冊點現在在左下角和居中函數(將父寬度除以2減去子寬度減去2,然後重複高度),將新中心作爲基準,就好像註冊點是之前的位置,而不是新的左下位置。所以,這並不是真的在想什麼,我只是沒有充分考慮旋轉函數對Container/DisplayObject的真正作用。 – Adrian 2009-11-23 20:39:29

0

我想使用< S:旋轉>旋轉中心。希望對你有用。