2011-12-21 1 views
1

현재 개체와 커서가 화면에서 정확하게 거리와 회전을 찾습니다.시간이 지남에 따라 XNA 2D 점 개체가 커서로 이동합니다

Vector2 direction = podType[podIndex]._Position - MouseCursorInWorld; 
mousePoint = (float)(Math.Atan2(-direction.X, direction.Y)); 

이 잘 작동, 다음 단계 나는 천천히 마우스 위치에 현재의 방향을 회전 할 수있는 방법을 알아내는 걸렸 내가 노력하고있어 어떤 잘 작동 비율을 사용했지만, 1 큰 문제가 있습니다 당신은 %가 커서 전체 회전의 비율이며, 여기에서 볼 수 있듯이

 percent = mousePoint/mousePoint * increment; 
     if(percent < mousePoint)increment += 0.01f; 
     if (percent > mousePoint) increment -= 0.01f; 

를 해결하기 위해 회전 그것 정확하게 의미 100 %에 도달 할 때까지 그 증가로 이동 비율이 적은 후 이상이있는 경우 커서를 향하게합니다.

문제는 왼쪽이 음수이고 오른쪽이 양수이므로 내 전체 회전이 3.1과 -3.1에 도달하므로 커서를 맨 아래 어딘가에 옮기고 맨 오른쪽에서 맨 왼쪽으로 이동할 때 문제가 발생합니다. 현재 커서 포인트 값이 음수이므로 현재 커서가 왼쪽 방향으로 회전합니다. 2.2 현재 양수였습니다. 2.2

회전을 감쌀 수 있으므로 음수 및 양수가 없습니다. 각도의? 아니면 제가 현재 사용하고있는 기술 이외에 다른 기술을 사용할 수있는 더 나은 기술이 있습니까? 시간 내 주셔서 감사합니다 :)

답변

3

나는 당신이 전체 백분율이 아니라는 것을 잘 모르겠다. 그러나 나는 당신이 객체 회전이 마우스쪽으로 점차적으로 향하게되기를 바란다.

시험 후 파이와 -Pi 사이에 목표 회전 양을 포장, 당신은 당신의 현재 회전 될 다음

  Vector2 dist = podType[podIndex]._Position - MouseCursorInWorld; 
      float angleTo = (float)Math.Atan2(dist.Y, dist.X); //angle you want to get to 

      rotation = MathHelper.WrapAngle(rotation); // keeps angle between pi and -pi 

      if (angleTo > rotation) 
       while (angleTo - rotation > MathHelper.Pi) 
        angleTo -= MathHelper.TwoPi; 
      else 
       while (angleTo - rotation < -MathHelper.Pi) 
        angleTo += MathHelper.TwoPi; 


      if (rotation < angleTo) rotation += 0.01f; 
      if (rotation > angleTo) rotation -= 0.01f; 

rotation처럼 뭔가를 할 수 있습니다. 또한, 두 숫자 사이의 백분율로 값을 가져 오려면 MathHelper.Lerp (선형 보간)을 조사합니다. 대신 + 또는 끝에

- 0.01f, 당신은 당신의 목표 각 1 % 모든 프레임쪽으로 회전의 값을 증가 할

rotation = MathHelper.Lerp(rotation, angleTo, 0.01f);

같은 것을 가질 수 있습니다.

+0

정확히 내가 무엇을 찾고 있었는지 고마워. 벤자민 : D는 왜 우주 비행사에 대해이 일을하려고하는지에 관심이있다. 나는 어떤 우주선이 다른 우주선보다 더 천천히 회전해야한다. 곧. 도와 줘서 다시 한번 고마워. :) – user1109013

관련 문제