2011-01-30 27 views
1

我有以下問題。我在持有人MC中擁有一個MovieClip。as3中的旋轉參考點居中問題

我想旋轉內部MC X'旋轉'參數,並仍然保持在持有人mc持有人MC參考點的右側和底部。所以轉彎後,應該看起來像:

+------ 
|X 
| 

而不是

X 
+------ 
| 
| 

誰能告訴我該怎麼做?基本上這個功能可以讓任何角度的X在X.rotation = ...之間以任意角度旋轉,並將其放回支架MC中。

感謝名單

+0

我想幫忙,但我錯過了一點:什麼是開始位置,哪一個是旋轉的(以什麼角度)以及最終的位置是什麼 - 想要的和真實的... imho a picture'd be有幫助 – www0z0k 2011-01-30 14:17:19

回答

1

一種可能的方式將是旋轉MC有在中心註冊點,但它也取決於你的旋轉管委會的形狀。

對於複雜的形狀,可以將旋轉的MC包含在一個圓內。圓的圓周將通過旋轉mc的最外點的旋轉而產生。你的圈子的註冊點因此成爲旋轉MC的註冊點。

來處理這種實現的方式取決於你的開發環境,與Flash IDE,它是相當簡單明瞭...

0

說你想0.5旋轉內mc_parent mc_child。

tempSprite:Sprite = new Sprite(); 
tempSprite.x = mc_child.x; 
tempSprite.y = mc_child.y; 
mc_parent.addChild(tempSprite); 

mc_child.rotation += 0.5; 

addChild(mc_child); 

如果父母的變化是一個問題,您可以使用矩陣變換。

0

這樣的功能?

function getPositionOffset(rotation:Number, origin:Point):Point 
{ 
    var radVal:Number= Math.PI * rotation/180; 

    var offsetX:Number = origin.x - origin.x * Math.cos(radVal) 
     + origin.y * Math.sin(radVal); 
    var offsetY:Number = origin.y - origin.x * Math.sin(radVal) 
     - origin.y * Math.cos(radVal); 

    return new Point(offsetX, offsetY); 
} 

然後你旋轉,像這樣的對象:

// original position before any rotation 
var originalX:Number = obj.x; 
var originalY:Number = obj.y; 

// let's say origin for a 100x100 object is 50,50 
var origin:Point = new Point(50, 50); 

// rotation: 45 
var pt:Point = getPositionOffset(45, origin); 

obj.rotation = 45; 

obj.x = Math.floor(originalX + pt.x); 
obj.y = Math.floor(originalY + pt.y); 

嗯,這是一般的想法。您可以通過不需要預先旋轉originalXoriginalY值並且讓它們計算出來(使用當前的旋轉和位置)來改進。