2014-09-03 6 views
2

이 코드는 탑을 그립니다. 정사각형 위치는 정사각형의 왼쪽 위에 있습니다. TILE_SIZE는 단순히 사각형의 치수입니다. MonoGame/XNA 이미지 회전

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Direction_to_Angle.php

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Rotation.php

이 회전은 정말 이상한되고 여기에, :

SpriteBatch.Draw(TowerImage, new Rectangle(square.X * TILE_SIZE, square.Y * TILE_SIZE, TILE_SIZE, TILE_SIZE), null, Color.White, myTower.Rotation, 
    new Vector2(TILE_SIZE - 35, TILE_SIZE - 35), SpriteEffects.None, (float)0.0); 

이 코드에 내가

public void FaceTarget(Vector2 center, Vector2 enemyCenter) 
     { 
      Vector2 direction = center - enemyCenter; 
      direction.Normalize(); 

      this.Rotation = (float)Math.Atan2(-direction.X, direction.Y); 
     } 

나는이 기반 않았다 회전을 결정하는 방법이다 정상적으로 보이는 방법입니다 :

http://puu.sh/bkd0E.png

그러나이 회전 할 때 그것은 다음과 같이 간다 : 그것은 보인다 때

http://puu.sh/bkd6K.png

마지막으로,이 경로를 완료 간다,가, 그 중심으로 회전 아니에요하지만 전체 이미지 왜 움직이는거야?

http://i.stack.imgur.com/4PuiZ.jpg

만 첫 번째 이미지는 왼쪽 맨 위 지점의 회전 내가 왜 모르는 것 같다 실제로 정확한 위치

의 타워입니다. 누구든지 도와 줄 수 있습니까?

+0

원산지로'Vector2 (sprite.width/2, sprite.height/2) '를 사용해 보셨습니까? –

답변

5

분명히 귀하의 스프라이트는 회전의 원점으로 Vector2.Zero (또는 Vector2(0,0)) 점을 고려하고 있습니다. 즉 Texture2D 파일의 왼쪽 상단을 의미합니다.

Draw 방법의 원점을 TILE_SIZE - 35으로 설정하면 타일이 70 픽셀 W/H의 사각형인지 궁금합니다.

덧셈을 new Vector2(TowerImage.Width/2, TowerImage.Height/2)으로 바꾸면 어떻게됩니까?

어떻게 항상 마우스의 위치 다음 이미지를 회전하기 쉽게 설명 this site에서 당신에게 예를 떠날거야 :

업데이트 방법 :

MouseState mouse = Mouse.GetState(); 
mousePosition = new Vector2(mouse.X, mouse.Y); 

Vector2 direction = mousePosition - position; 
direction.Normalize(); 

rotation = (float)Math.Atan2(
       (double)direction.Y, 
       (double)direction.X); 

그리기 방법 :

spriteBatch.Begin(); 

spriteBatch.Draw(
    rocket, 
    position, 
    null, 
    Color.White, 
    rotation, 
    new Vector2(
     rocket.Width/2, 
     rocket.Height/2), 
    1.0f, 
    SpriteEffects.None, 
    1.0f); 

spriteBatch.End(); 

게시 된 코드 th에서 확인하십시오. 전자 회전 각은 사용자와 약간 다르게 계산되지만 코드의 중요한 부분은 Draw 방법의 원점 계산입니다.

+0

나는 확실히 그것을 시도 할 것이다. 또한 TILE_SIZE는 경로 및 잔디 텍스처와 같습니다. 40X이면 어떤 이유로 TILE_SIZE - 35 타일 중앙에 배치합니다. 실제로는 -TILE_SIZE 또는 실제로 배치해도됩니다. 멀리.그러나 그렇습니다, 그것은 왼쪽 상단 모퉁이를 돌고 있으며 나는 왜 그런지 모릅니다. 조정을 한 후에도 제어가 어려워지는 거대한 회전입니다. 나는 그 튜토리얼을 내일 시도 할 것이다. – Technocrat

+0

좋아요, 그게 도움이되지 않으면 내 가정용 PC에서 시도해 보겠습니다. –

+1

고마워요! ImageWidth/2는 어떻게 작동 했나요? 어떻게 그렇게 어리 석 었는가 .. 나는 원점을 옮겨 보려고했다. 등 ... 결코 작동하지 않았다. – Technocrat