2010-07-17 7 views
3

XNA 게임에서 탄도 궤적을 구현하고 싶습니다. 그리고 탄환이 중력 곡선을 따르게하는 가장 좋은 방법을 찾으려고했습니다.XNA의 커브 경로를 따라 스프라이트 애니메이션하기

제가 생각할 수있는 가장 좋은 점은 먼저 곡선을 계산하고 "곡선"클래스에 저장하는 것입니다. 그런 다음 스프라이트가 그 커브를 따라 움직 이도록하십시오.

그러나 실제로 스프라이트를 그 커브를 따라 움직이는 방법을 알 수는 없습니다.

어떻게하면 좋을까요? 아니면 더 좋은 방법이 있습니까?

답변

9

기본적으로 고교 수준의 물리학 equations of motion (위키피디아 기사)을 사용하고 싶습니다.

s = s₀ + v₀t + ½at² 

:

발사체 모션

, 이것은 중요한 방정식 (변위 같다 :. 초기 변위 더한 시간을 곱하여 초기 속도, 게다가 반 시간 곱하여 가속도 제곱)

2D에서 움직이는 발사체가 있다고 가정 해보십시오. 기본적으로 각 차원에 대해이 방정식을 실행합니다. X 방향에서 초기 위치와 초기 속도는 있지만 가속은 없습니다.

Y 방향에서 중력으로 인해 초기 위치, 초기 속도 및 가속도가 아래쪽으로 향합니다.

당신이해야 할 일은 발사체가 발사 된 이후의 시간을 추적하고 계산 된 위치에 스프라이트를 그립기 만하면됩니다. 여기

약간 거친 XNA 코드 - 당신은 그냥 한 번에 두 축을 계산할 수 있습니다 볼 수 있습니다 :

Vector2 initialPosition = Vector2.Zero; 
Vector2 initialVelocity = new Vector2(10, 10); // Choose values that work for you 
Vector2 acceleration = new Vector2(0, -9.8f); 

float time = 0; 
Vector2 position = Vector2.Zero; // Use this when drawing your sprite 

public override void Update(GameTime gameTime) 
{ 
    time += (float)gameTime.ElapsedGameTime.TotalSeconds; 

    position = initialPosition + initialVelocity * time 
       + 0.5f * acceleration * time * time; 
} 

을 조금 대수를 사용하면 계산과 같은 일을하는 운동의 그 같은 공식을 사용 할 수있는 속도로 발사체를 발사하여 특정 지점을 공격합니다.

+0

굉장합니다. 꽤 잘 작동합니다. 그러나 어떤 생각이 초기 각도를 추가하는 방법? 예를 들어, 발사체가 0.5 라디안에서 발사되는 경우? –

+0

@ 아담 : 그것은 간단한 삼각법입니다 :'initialVelocity = (cos (0.5), sin (0.5)) * 100' –

+0

고마워, 나는 마침내 그것을 알아 냈다. 문제는 XNA 삼각법이 라디안을 찾고 각도가 아니라는 것을 깨닫지 못해서 ... 처음부터 모두 각도로 변환하는 것이 잘못되었습니다. –

관련 문제