기본적으로 고교 수준의 물리학 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.5 라디안에서 발사되는 경우? –
@ 아담 : 그것은 간단한 삼각법입니다 :'initialVelocity = (cos (0.5), sin (0.5)) * 100' –
고마워, 나는 마침내 그것을 알아 냈다. 문제는 XNA 삼각법이 라디안을 찾고 각도가 아니라는 것을 깨닫지 못해서 ... 처음부터 모두 각도로 변환하는 것이 잘못되었습니다. –