我有以下問題。我在持有人MC中擁有一個MovieClip。as3中的旋轉參考點居中問題
我想旋轉內部MC X
'旋轉'參數,並仍然保持在持有人mc持有人MC參考點的右側和底部。所以轉彎後,應該看起來像:
+------
|X
|
而不是
X
+------
|
|
誰能告訴我該怎麼做?基本上這個功能可以讓任何角度的X在X.rotation = ...
之間以任意角度旋轉,並將其放回支架MC中。
感謝名單
我有以下問題。我在持有人MC中擁有一個MovieClip。as3中的旋轉參考點居中問題
我想旋轉內部MC X
'旋轉'參數,並仍然保持在持有人mc持有人MC參考點的右側和底部。所以轉彎後,應該看起來像:
+------
|X
|
而不是
X
+------
|
|
誰能告訴我該怎麼做?基本上這個功能可以讓任何角度的X在X.rotation = ...
之間以任意角度旋轉,並將其放回支架MC中。
感謝名單
一種可能的方式將是旋轉MC有在中心註冊點,但它也取決於你的旋轉管委會的形狀。
對於複雜的形狀,可以將旋轉的MC包含在一個圓內。圓的圓周將通過旋轉mc的最外點的旋轉而產生。你的圈子的註冊點因此成爲旋轉MC的註冊點。
來處理這種實現的方式取決於你的開發環境,與Flash IDE,它是相當簡單明瞭...
說你想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);
如果父母的變化是一個問題,您可以使用矩陣變換。
這樣的功能?
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);
嗯,這是一般的想法。您可以通過不需要預先旋轉originalX
和originalY
值並且讓它們計算出來(使用當前的旋轉和位置)來改進。
我想幫忙,但我錯過了一點:什麼是開始位置,哪一個是旋轉的(以什麼角度)以及最終的位置是什麼 - 想要的和真實的... imho a picture'd be有幫助 – www0z0k 2011-01-30 14:17:19