문제

내가 만들려고 노력하는 게임이 총알이에 비행 할 수 있습니다.I would ike 들을 벡터와 방향과 크기를 그들에게로 이동합니다.난 그냥 확인을 구현하는 방법을 이?

감사

도움이 되었습니까?

해결책

계산 해야하는 두 부분이 있습니다. 먼저 총 거리부터 시작합니다. 이것은 간단해야합니다.

total_distance = velocity * time

이것이 2D 게임이라고 가정하면 Sine & Cosine을 사용하여 총 거리를 X 및 Y 구성 요소 (주어진 각도)로 나누어야합니다.

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

마지막으로, 거리 x/y는 총알의 시작 위치에 따라 오프셋되어야합니다.

pos_x = distance_x + start_pos_x
pos_y = distance_y + start_pos_y

물론, 당신은이 모든 것을 멋진 수업으로, 필요에 따라 확장 및 연마 할 수 있습니다.

다른 팁

할 수 있습 총알 클래스를 포함하는 위치,방향으로는 벡터와 속도합니다.모든 시간을 단계 업데이트할 수 있습 총알의 위치는 다음과 같이

position += direction * veclocity;

여기에서는 방향으로 단위였다.

나는 다음과 같은 것으로 시작합니다.

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은 분수를 나타냅니다). 스칼라를 사용한 벡터 곱셈은 각 구성 요소에 스칼라에 곱하여 수행됩니다 ...

안부, 크리스토프

이것은 어떤 용도로?

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

Google은 훌륭한 도구입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top