2011-03-01 3 views
3

나는 주어진 속도 V에서 두 개의 Vector2 점 (Ax, Ay) 및 (Bx, By)로 정의 된 선을 따라 스프라이트가 움직이는 간단한 XNA 데모를 작성했습니다. (시간 단위로 이동 한 선상의 거리로 이해됨). 나는 내가 다음과 비슷한 방정식을 이용하여 2 차원 공간에서 x와 y 위치를 계산해야하는 것 이해 :2D에서 선을 따라 XNA 이동

dx = V*dt*cos(alpha) 
dy = V*dt*sin(alpha) 

하지만 고려 부정적인 V를 복용 ("뒤로"이동할 때처럼) 을하지만 난 궁금해 나는 바퀴를 재발 명하지 않을거야, 아마도 xna가 해결책을 제시 할까?

+1

난 항상 삼각을 사용하는 것보다 쉬울하는 차원에서 선을 따라 이동을 위해 대수를 사용하여 발견했다. 그것은 내 개인적인 취향이지만. – corsiKa

+0

당신은 부정적인 속도를 고려할 필요가 없습니다; 반대 방향 (알파 + 180도)으로 여행하는 것과 같습니다. – Justin

답변

4

A에서 B까지 A에서 2D 벡터를 만듭니다. X 및 Y 구성 요소를 벡터의 길이로 나눠서 정규화합니다. X 및 Y 구성 요소에 속도를 곱하십시오. 이것을 타임 슬라이스 (20 밀리 초 동안 20/1000)로 곱하십시오. 이 X 및 Y 값을 사용자 위치에 추가하십시오.

예 :

A is (2, 5) B is (1, 8) 
Speed is 2 (move 2 units in one second) 
Time slice is 20 milliseconds since last update 

C will be (-1, 3) 
Normalize C by dividing by distance (sqrt(-1 * -1 + 3 * 3) = 3.1622777) 
Normalized is (-0.316277, 0.9486833) (to move 1 unit that direction) 
Multiply by speed (2): (-0.632554, 1.8973666) 
For movement this time period, multiply by 20 and divide by 1000: 
(-0.01265108, 0.037947332), move sprite this far this frame