2011-07-06 180 views
2

我正在做一個精靈的簡單旋轉,但是有一個奇怪的行爲,精靈不會圍繞它的左上角旋轉。我想我沿着測試類的左上角而不是精靈子進行旋轉。我想旋轉左上角的矩形(有點像鍾針)。該代碼是很短,所以我會讓代碼+圖片解釋我的問題:旋轉精靈將精靈從原始位置移動

package 
{ 
    import flash.display.Sprite; 

    public class test extends Sprite 
    { 
     public function test() 
     { 
      var mySprite:Sprite = new Sprite(); 
      mySprite.graphics.beginFill(0x000000); 
      mySprite.graphics.drawRect(100,100,6,120); 
      mySprite.graphics.endFill(); 
      this.addChild(mySprite); 
      mySprite.rotation = 45; 
     } 

    } 
} 

似乎太簡單了,搞砸了,還有這裏的結果。紅線位於主鍵上方以供參考。第一張圖我設置mySprite.rotation=0和第二個是上面顯示的代碼: http://i56.tinypic.com/a4vi4h.png

enter image description here

我讀了很多東西約定點周圍旋轉,我已經試過影片剪輯,而不是精靈做,我甚至複製粘貼tutorial on rotation,沒有任何作品。爲什麼會發生這種行爲,我該如何解決?

編輯:謝謝大家,所有的建議都以不同的方式幫助我,他們都是正確的,所以+1,我會選擇我選擇在我的代碼中使用的解決方案。

回答

1

的精靈是繞着它的左上角,但您不必在左上角的任何圖形。酒吧呈現在(100,100)。試試這個:

var mySprite:Sprite = new Sprite(); 
mySprite.graphics.beginFill(0x000000); 
mySprite.graphics.drawRect(0,0,6,120); // render in 0, 0 
mySprite.graphics.endFill(); 
mySprite.x = 100; // move it 
mySprite.y = 100; 
this.addChild(mySprite); 
mySprite.rotation = 45; 
+0

啊,謝謝。所以當我在100,100處畫一個矩形時,圖形仍然是0,0,因爲它是左上角的? (我假設0,(我的矩形的右側)作爲右上角?)我應該渲染所有圖形在0,0和移動它們? – NorthGuard

+0

右上角是(寬度,0)。 (寬度,高度)在右下方。 – taskinoor

3

如果你想從它的中心旋轉,你可以試試:

var mySprite:Sprite = new Sprite(); 
mySprite.x = mySprite.y = 100; 
mySprite.graphics.beginFill(0x000000); 
mySprite.graphics.drawRect(-3,-60,6,120); 
mySprite.graphics.endFill(); 
this.addChild(mySprite); 
mySprite.rotation = 45; 
+0

我編輯了它,但我想旋轉它關於它的左上角。我將不得不使用基於角度的新x,y座標來重繪它,只是爲了讓它旋轉到位? (我最終想要動畫) – NorthGuard

+1

作爲@taskinoor提到,您可以將drawRect函數中的x,y設置爲(0,0)。這將從左上角抽出。但是,您想要左上角的錨點,還是要在左下角? – Corey

+0

yup,左上角,非常感謝 – NorthGuard

1

您正在圍繞與其x/y座標(當前設置爲0,0)相同的mySprites註冊點旋轉矩形。您可以繪製矩形,然後通過設置sprite xy將其移動到正確的位置。

var mySprite:Sprite = new Sprite(); 
mySprite.graphics.beginFill(0x000000); 
mySprite.graphics.drawRect(-3, -60, 6, 120); 
mySprite.graphics.endFill(); 
mySprite.x = 100; 
mySprite.y = 100; 
addChild(mySprite); 
mySprite.rotation = 45; 

這應該工作。要查看問題是如何發生的,請編譯下面的代碼,您將能夠看到原始欄的移動。

for (var i:int = 0; i <= 45; i+=5) { 
    var mySprite:Sprite = new Sprite(); 
    mySprite.graphics.beginFill(0x000000,0.5); 
    mySprite.graphics.drawRect(100, 100, 6, 120); 
    mySprite.graphics.endFill(); 
    addChild(mySprite); 
    mySprite.rotation = i; 
}