2010-02-12 3 views
1

나는 어떤 방향 으로든 총알이 날 수있는 게임을 만들고있다. 방향과 크기를 가진 벡터로 만들어서 방향을 바꾸도록해야합니다. 이 방법을 구현하는 방법을 모르겠습니다.벡터 도움말

감사

+0

임의의 방향과 벡터를 생성 하시겠습니까? –

+0

저는 각도와 크기를 매개 변수로 전달하고자합니다. 본질적으로 어떤 방향 으로든 갈 수있는 글 머리 기호 인 경우, 크기가 원하지 않는 글 머리표 인 경우 – jmasterx

+0

을 입력하십시오. 위치, 방향, 속도 및 시간 간격 (마지막 업데이트 이후 시간)이 필요합니다 – Craig

답변

1

입니다. 첫째, 저는 총 거리를 가지고 시작합니다. 이것은 간단합니다 :

distance_y = total_distance * sin(2 * pi * angle/360) 
distance_x = total_distance * cos(2 * pi * angle/360) 
:

total_distance = velocity * time 

이는 2D 게임이다 가정하면, 다음 (주어진 각도) X 및 Y 구성 요소로 총 거리를 헤어 사인 & 코사인을 사용해야합니다 물론

pos_x = distance_x + start_pos_x 
pos_y = distance_y + start_pos_y 

, 당신은 0을 확대하는 좋은 수업이 모든 포장 수 :

마지막으로, 거리 x는/Y는 총알의 시작 위치에 따라 오프셋한다은 필요에 따라 연마합니다.

+0

해결을 위해 노력하고 있는지 알고있는 것. 내 문제를 해결했습니다. – jmasterx

+0

이 방법이 효과적이지만 최선의 해결책은 아닙니다. 또한 크기 나 방향을 포함하지 않았습니다. 원래 포스터는 벡터 수학을 배울 필요가 있습니다. – Craig

+1

내 예제 방정식은 실제로 크기 (속도)와 방향 (각도)을 모두 포함합니다. 또한 그의 의견을 통해 벡터를 X/Y 구성 요소로 분해하는 데 어려움을 겪었으므로이를 수행하는 방법에 대한 간단한 예제를 제공하려고 노력했습니다. –

1

당신은 위치, 방향 벡터 및 속도를 포함하는 총알 클래스를 가질 수있다. 매 순간마다 다음과 같이 총알 위치를 업데이트 할 수 있습니다.

position += direction * veclocity; 

여기에서는 방향이 단위 벡터라고 가정합니다.

+0

이것이 X 및 Y 좌표로 어떻게 변환되는지 확실하지 않습니까? – jmasterx

+0

속도를 타임 스텝으로 나누는 것을 잊지 마십시오. 그렇지 않으면 빠르게 움직이는 미친 객체를 갖게됩니다. – Craig

+0

하지만 '위치'는 어떻게 이것을 x, y 좌표로 바꿀 수 있습니까? – jmasterx

1

이 같은 뭔가 시작을 만들 것입니다 :

struct Vector3f { 
    float x, y, z; 
}; 

struct Bullet { 
    Vector3f position; 
    Vector3f velocity; 
}; 

inline const Vector3f& Vector3f::operator+=(const Vector &other) 
{ 
    x += other.x; 
    y += other.y; 
    z += other.z; 
    return *this; 
} 

inline const Vector3f& Vector3f::operator*=(float v) 
{ 
    x *= v; 
    y *= v; 
    z *= v; 
    return *this; 
} 

그런 다음 bullet.position += velocity와 총알의 위치를 ​​업데이트 할 수 있습니다 (벡터 또한이 구성 요소를 별도로 추가하여 수행됩니다). 속도 벡터에는 방향과 속도 (= 벡터의 크기)가 모두 포함됩니다.

그리고 총알이 모든 프레임의 속도가 느려지는 경우 bullet.velocity *= 0.98 (여기서 0.98은 분수를 나타냄)과 같은 작업을 수행 할 수 있습니다. 스칼라와 벡터 곱셈, ... 스칼라 각 성분을 곱하여 크리스토프

+0

고마워요! DirectX는 이제 모두 의미가 있습니다! 나는 그 각도를 만드는 법을 모르지만, 만약 내가 50도에서 여행하기를 원한다면, – jmasterx

+0

Vector3f (0, 1, 0)는 똑바로 여행한다는 것을 의미합니다 (y 축이 위를 향한 것으로 가정 함) 그리고 Vector 1, 0, 0)은 당신이 왼쪽으로 여행 할 수 있음을 의미합니다. 50 °에서 주행하려면 Vector (cos (50), sin (50), 0)를 쓸 수 있습니다. – tux21b

0

이 어떤 사용

안부 수행?

http://www.cs.cmu.edu/~ajw/doc/svl.html

구글 계산해야 할 두 부분이 있습니다 훌륭한 도구

+0

저는 벡터와 행렬 수학만큼 간단하다고 생각합니다. 실제로 수학을하는 법을 배우는 동안 가치가있을 것입니다. 그가 게임에 참여하기를 원한다면, 트랙을 따라 문제를 해결하기 위해 방정식과 그 목적을 알아야 할 것입니다. 어떻게 제품 및 교차 제품이 S.A.T – Craig