2011-07-06 5 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)으로 렌더링됩니다. 이 시도 : 당신은 (현재 0,0로 설정)는 X/Y 좌표와 동일하다 mySprites 기준점 주위의 사각형을 회전하고

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 좌표로 그것을 다시 그려야 할 것인가? (나는 결국 그것을 움직이게하고 싶다) @taskinoor가 언급 한대로 – NorthGuard

+1

을 사용하면 drawRect 함수의 x, y를 (0,0)으로 설정할 수있다. 그것은 왼쪽 상단에서 끌어낼 것입니다. 그러나 앵커를 왼쪽 상단에 놓으시겠습니까, 아니면 왼쪽 하단에 놓을까요? – Corey

+0

맙소사, 왼쪽 상단, 감사합니다. – NorthGuard

1

한다. 직사각형을 그린 다음 스프라이트 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; 
} 
관련 문제